@nlabs/reaktor 0.10.5 → 0.10.7

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 (535) hide show
  1. package/lib/actions/apps.d.ts +1 -0
  2. package/lib/actions/apps.d.ts.map +1 -0
  3. package/lib/actions/apps.js +221 -0
  4. package/lib/actions/connections.d.ts +1 -0
  5. package/lib/actions/connections.d.ts.map +1 -0
  6. package/lib/actions/connections.js +62 -0
  7. package/lib/actions/content.d.ts +1 -0
  8. package/lib/actions/content.d.ts.map +1 -0
  9. package/lib/actions/content.js +240 -0
  10. package/lib/actions/conversations.d.ts +1 -0
  11. package/lib/actions/conversations.d.ts.map +1 -0
  12. package/lib/actions/conversations.js +335 -0
  13. package/lib/actions/dynamodb.d.ts +1 -0
  14. package/lib/actions/dynamodb.d.ts.map +1 -0
  15. package/lib/actions/dynamodb.js +119 -0
  16. package/lib/actions/email.d.ts +1 -0
  17. package/lib/actions/email.d.ts.map +1 -0
  18. package/lib/actions/email.js +56 -0
  19. package/lib/actions/files.d.ts +1 -0
  20. package/lib/actions/files.d.ts.map +1 -0
  21. package/lib/actions/files.js +226 -0
  22. package/lib/actions/groups.d.ts +1 -0
  23. package/lib/actions/groups.d.ts.map +1 -0
  24. package/lib/actions/groups.js +267 -0
  25. package/lib/actions/images.d.ts +1 -0
  26. package/lib/actions/images.d.ts.map +1 -0
  27. package/lib/actions/images.js +723 -0
  28. package/lib/actions/index.d.ts +1 -0
  29. package/lib/actions/index.d.ts.map +1 -0
  30. package/lib/actions/index.js +29 -0
  31. package/lib/actions/ios.d.ts +1 -0
  32. package/lib/actions/ios.d.ts.map +1 -0
  33. package/lib/actions/ios.js +230 -0
  34. package/lib/actions/locations.d.ts +1 -0
  35. package/lib/actions/locations.d.ts.map +1 -0
  36. package/lib/actions/locations.js +111 -0
  37. package/lib/actions/messages.d.ts +1 -0
  38. package/lib/actions/messages.d.ts.map +1 -0
  39. package/lib/actions/messages.js +167 -0
  40. package/lib/actions/notifications.d.ts +3 -2
  41. package/lib/actions/notifications.d.ts.map +1 -0
  42. package/lib/actions/notifications.js +37 -0
  43. package/lib/actions/payments.d.ts +1 -0
  44. package/lib/actions/payments.d.ts.map +1 -0
  45. package/lib/actions/payments.js +449 -0
  46. package/lib/actions/posts.d.ts +1 -0
  47. package/lib/actions/posts.d.ts.map +1 -0
  48. package/lib/actions/posts.js +608 -0
  49. package/lib/actions/profiles.d.ts +1 -0
  50. package/lib/actions/profiles.d.ts.map +1 -0
  51. package/lib/actions/profiles.js +58 -0
  52. package/lib/actions/reactions.d.ts +1 -0
  53. package/lib/actions/reactions.d.ts.map +1 -0
  54. package/lib/actions/reactions.js +286 -0
  55. package/lib/actions/s3.d.ts +1 -0
  56. package/lib/actions/s3.d.ts.map +1 -0
  57. package/lib/actions/s3.js +102 -0
  58. package/lib/actions/search.d.ts +1 -0
  59. package/lib/actions/search.d.ts.map +1 -0
  60. package/lib/actions/search.js +81 -0
  61. package/lib/actions/sms.d.ts +1 -0
  62. package/lib/actions/sms.d.ts.map +1 -0
  63. package/lib/actions/sms.js +52 -0
  64. package/lib/actions/statistics.d.ts +1 -0
  65. package/lib/actions/statistics.d.ts.map +1 -0
  66. package/lib/actions/statistics.js +43 -0
  67. package/lib/actions/subscriptions.d.ts +1 -0
  68. package/lib/actions/subscriptions.d.ts.map +1 -0
  69. package/lib/actions/subscriptions.js +202 -0
  70. package/lib/actions/tags.d.ts +1 -0
  71. package/lib/actions/tags.d.ts.map +1 -0
  72. package/lib/actions/tags.js +263 -0
  73. package/lib/actions/users.d.ts +1 -0
  74. package/lib/actions/users.d.ts.map +1 -0
  75. package/lib/actions/users.js +802 -0
  76. package/lib/actions/videos.d.ts +1 -0
  77. package/lib/actions/videos.d.ts.map +1 -0
  78. package/lib/actions/videos.js +423 -0
  79. package/lib/actions/websockets.d.ts +1 -0
  80. package/lib/actions/websockets.d.ts.map +1 -0
  81. package/lib/actions/websockets.js +164 -0
  82. package/lib/adapters/arangoAdapter.d.ts +1 -0
  83. package/lib/adapters/arangoAdapter.d.ts.map +1 -0
  84. package/lib/adapters/arangoAdapter.js +70 -0
  85. package/lib/adapters/contentAdapter.d.ts +1 -0
  86. package/lib/adapters/contentAdapter.d.ts.map +1 -0
  87. package/lib/adapters/contentAdapter.js +108 -0
  88. package/lib/adapters/fileAdapter.d.ts +1 -0
  89. package/lib/adapters/fileAdapter.d.ts.map +1 -0
  90. package/lib/adapters/fileAdapter.js +119 -0
  91. package/lib/adapters/imageAdapter.d.ts +1 -0
  92. package/lib/adapters/imageAdapter.d.ts.map +1 -0
  93. package/lib/adapters/imageAdapter.js +112 -0
  94. package/lib/adapters/index.d.ts +1 -0
  95. package/lib/adapters/index.d.ts.map +1 -0
  96. package/lib/adapters/index.js +11 -0
  97. package/lib/adapters/messageAdapter.d.ts +1 -0
  98. package/lib/adapters/messageAdapter.d.ts.map +1 -0
  99. package/lib/adapters/messageAdapter.js +82 -0
  100. package/lib/adapters/postAdapter.d.ts +1 -0
  101. package/lib/adapters/postAdapter.d.ts.map +1 -0
  102. package/lib/adapters/postAdapter.js +117 -0
  103. package/lib/adapters/reaktorAdapter.d.ts +1 -0
  104. package/lib/adapters/reaktorAdapter.d.ts.map +1 -0
  105. package/lib/adapters/reaktorAdapter.js +59 -0
  106. package/lib/adapters/tagAdapter.d.ts +1 -0
  107. package/lib/adapters/tagAdapter.d.ts.map +1 -0
  108. package/lib/adapters/tagAdapter.js +99 -0
  109. package/lib/adapters/userAdapter.d.ts +1 -0
  110. package/lib/adapters/userAdapter.d.ts.map +1 -0
  111. package/lib/adapters/userAdapter.js +264 -0
  112. package/lib/config.d.ts +1 -0
  113. package/lib/config.d.ts.map +1 -0
  114. package/lib/config.js +161 -0
  115. package/lib/handlers/graphqlHandler.d.ts +1 -0
  116. package/lib/handlers/graphqlHandler.d.ts.map +1 -0
  117. package/lib/handlers/graphqlHandler.js +118 -0
  118. package/lib/index.d.ts +1 -0
  119. package/lib/index.d.ts.map +1 -0
  120. package/lib/index.js +18 -0
  121. package/lib/lambdas/actions/websockets.d.ts +1 -0
  122. package/lib/lambdas/actions/websockets.d.ts.map +1 -0
  123. package/lib/lambdas/actions/websockets.js +105 -0
  124. package/lib/lambdas/authorizer.d.ts +1 -0
  125. package/lib/lambdas/authorizer.d.ts.map +1 -0
  126. package/lib/lambdas/authorizer.js +41 -0
  127. package/lib/lambdas/connection.d.ts +1 -0
  128. package/lib/lambdas/connection.d.ts.map +1 -0
  129. package/lib/lambdas/connection.js +85 -0
  130. package/lib/lambdas/utils/message.d.ts +1 -0
  131. package/lib/lambdas/utils/message.d.ts.map +1 -0
  132. package/lib/lambdas/utils/message.js +20 -0
  133. package/lib/lambdas/utils/websocket.d.ts +1 -0
  134. package/lib/lambdas/utils/websocket.d.ts.map +1 -0
  135. package/lib/lambdas/utils/websocket.js +78 -0
  136. package/lib/mocks/conversation.d.ts +1 -0
  137. package/lib/mocks/conversation.d.ts.map +1 -0
  138. package/lib/mocks/conversation.js +10 -0
  139. package/lib/mocks/file.d.ts +1 -0
  140. package/lib/mocks/file.d.ts.map +1 -0
  141. package/lib/mocks/file.js +13 -0
  142. package/lib/mocks/group.d.ts +1 -0
  143. package/lib/mocks/group.d.ts.map +1 -0
  144. package/lib/mocks/group.js +20 -0
  145. package/lib/mocks/image.d.ts +1 -0
  146. package/lib/mocks/image.d.ts.map +1 -0
  147. package/lib/mocks/image.js +17 -0
  148. package/lib/mocks/post.d.ts +1 -0
  149. package/lib/mocks/post.d.ts.map +1 -0
  150. package/lib/mocks/post.js +28 -0
  151. package/lib/mocks/tag.d.ts +1 -0
  152. package/lib/mocks/tag.d.ts.map +1 -0
  153. package/lib/mocks/tag.js +12 -0
  154. package/lib/mocks/user.d.ts +1 -0
  155. package/lib/mocks/user.d.ts.map +1 -0
  156. package/lib/mocks/user.js +61 -0
  157. package/lib/mocks/video.d.ts +1 -0
  158. package/lib/mocks/video.d.ts.map +1 -0
  159. package/lib/mocks/video.js +17 -0
  160. package/lib/mutations/content.d.ts +1 -0
  161. package/lib/mutations/content.d.ts.map +1 -0
  162. package/lib/mutations/content.js +27 -0
  163. package/lib/mutations/index.d.ts +1 -0
  164. package/lib/mutations/index.d.ts.map +1 -0
  165. package/lib/mutations/index.js +29 -0
  166. package/lib/mutations/locations.d.ts +1 -0
  167. package/lib/mutations/locations.d.ts.map +1 -0
  168. package/lib/mutations/locations.js +22 -0
  169. package/lib/mutations/messages.d.ts +1 -0
  170. package/lib/mutations/messages.d.ts.map +1 -0
  171. package/lib/mutations/messages.js +75 -0
  172. package/lib/mutations/posts.d.ts +1 -0
  173. package/lib/mutations/posts.d.ts.map +1 -0
  174. package/lib/mutations/posts.js +31 -0
  175. package/lib/mutations/profiles.d.ts +1 -0
  176. package/lib/mutations/profiles.d.ts.map +1 -0
  177. package/lib/mutations/profiles.js +78 -0
  178. package/lib/mutations/reactions.d.ts +1 -0
  179. package/lib/mutations/reactions.d.ts.map +1 -0
  180. package/lib/mutations/reactions.js +29 -0
  181. package/lib/mutations/statistics.d.ts +1 -0
  182. package/lib/mutations/statistics.d.ts.map +1 -0
  183. package/lib/mutations/statistics.js +17 -0
  184. package/lib/mutations/subscriptions.d.ts +1 -0
  185. package/lib/mutations/subscriptions.d.ts.map +1 -0
  186. package/lib/mutations/subscriptions.js +38 -0
  187. package/lib/mutations/tags.d.ts +1 -0
  188. package/lib/mutations/tags.d.ts.map +1 -0
  189. package/lib/mutations/tags.js +109 -0
  190. package/lib/mutations/users.d.ts +1 -0
  191. package/lib/mutations/users.d.ts.map +1 -0
  192. package/lib/mutations/users.js +129 -0
  193. package/lib/objectTypes/app.d.ts +1 -0
  194. package/lib/objectTypes/app.d.ts.map +1 -0
  195. package/lib/objectTypes/app.js +147 -0
  196. package/lib/objectTypes/bankAccount.d.ts +1 -0
  197. package/lib/objectTypes/bankAccount.d.ts.map +1 -0
  198. package/lib/objectTypes/bankAccount.js +54 -0
  199. package/lib/objectTypes/connection.d.ts +1 -0
  200. package/lib/objectTypes/connection.d.ts.map +1 -0
  201. package/lib/objectTypes/connection.js +26 -0
  202. package/lib/objectTypes/content.d.ts +1 -0
  203. package/lib/objectTypes/content.d.ts.map +1 -0
  204. package/lib/objectTypes/content.js +79 -0
  205. package/lib/objectTypes/conversation.d.ts +1 -0
  206. package/lib/objectTypes/conversation.d.ts.map +1 -0
  207. package/lib/objectTypes/conversation.js +53 -0
  208. package/lib/objectTypes/creditCard.d.ts +1 -0
  209. package/lib/objectTypes/creditCard.d.ts.map +1 -0
  210. package/lib/objectTypes/creditCard.js +64 -0
  211. package/lib/objectTypes/document.d.ts +1 -0
  212. package/lib/objectTypes/document.d.ts.map +1 -0
  213. package/lib/objectTypes/document.js +21 -0
  214. package/lib/objectTypes/error.d.ts +1 -0
  215. package/lib/objectTypes/error.d.ts.map +1 -0
  216. package/lib/objectTypes/error.js +24 -0
  217. package/lib/objectTypes/external.d.ts +1 -0
  218. package/lib/objectTypes/external.d.ts.map +1 -0
  219. package/lib/objectTypes/external.js +52 -0
  220. package/lib/objectTypes/file.d.ts +1 -0
  221. package/lib/objectTypes/file.d.ts.map +1 -0
  222. package/lib/objectTypes/file.js +76 -0
  223. package/lib/objectTypes/filter.d.ts +1 -0
  224. package/lib/objectTypes/filter.d.ts.map +1 -0
  225. package/lib/objectTypes/filter.js +21 -0
  226. package/lib/objectTypes/group.d.ts +1 -0
  227. package/lib/objectTypes/group.d.ts.map +1 -0
  228. package/lib/objectTypes/group.js +97 -0
  229. package/lib/objectTypes/iapSubscription.d.ts +1 -0
  230. package/lib/objectTypes/iapSubscription.d.ts.map +1 -0
  231. package/lib/objectTypes/iapSubscription.js +18 -0
  232. package/lib/objectTypes/image.d.ts +1 -0
  233. package/lib/objectTypes/image.d.ts.map +1 -0
  234. package/lib/objectTypes/image.js +105 -0
  235. package/lib/objectTypes/index.d.ts +1 -0
  236. package/lib/objectTypes/index.d.ts.map +1 -0
  237. package/lib/objectTypes/index.js +28 -0
  238. package/lib/objectTypes/location.d.ts +1 -0
  239. package/lib/objectTypes/location.d.ts.map +1 -0
  240. package/lib/objectTypes/location.js +85 -0
  241. package/lib/objectTypes/message.d.ts +1 -0
  242. package/lib/objectTypes/message.d.ts.map +1 -0
  243. package/lib/objectTypes/message.js +72 -0
  244. package/lib/objectTypes/passcode.d.ts +1 -0
  245. package/lib/objectTypes/passcode.d.ts.map +1 -0
  246. package/lib/objectTypes/passcode.js +20 -0
  247. package/lib/objectTypes/plan.d.ts +1 -0
  248. package/lib/objectTypes/plan.d.ts.map +1 -0
  249. package/lib/objectTypes/plan.js +71 -0
  250. package/lib/objectTypes/post.d.ts +1 -0
  251. package/lib/objectTypes/post.d.ts.map +1 -0
  252. package/lib/objectTypes/post.js +101 -0
  253. package/lib/objectTypes/profile.d.ts +1 -0
  254. package/lib/objectTypes/profile.d.ts.map +1 -0
  255. package/lib/objectTypes/profile.js +68 -0
  256. package/lib/objectTypes/reaction.d.ts +1 -0
  257. package/lib/objectTypes/reaction.d.ts.map +1 -0
  258. package/lib/objectTypes/reaction.js +37 -0
  259. package/lib/objectTypes/relation.d.ts +1 -0
  260. package/lib/objectTypes/relation.d.ts.map +1 -0
  261. package/lib/objectTypes/relation.js +27 -0
  262. package/lib/objectTypes/search.d.ts +1 -0
  263. package/lib/objectTypes/search.d.ts.map +1 -0
  264. package/lib/objectTypes/search.js +50 -0
  265. package/lib/objectTypes/statistics.d.ts +1 -0
  266. package/lib/objectTypes/statistics.d.ts.map +1 -0
  267. package/lib/objectTypes/statistics.js +17 -0
  268. package/lib/objectTypes/subscription.d.ts +1 -0
  269. package/lib/objectTypes/subscription.d.ts.map +1 -0
  270. package/lib/objectTypes/subscription.js +102 -0
  271. package/lib/objectTypes/tag.d.ts +1 -0
  272. package/lib/objectTypes/tag.d.ts.map +1 -0
  273. package/lib/objectTypes/tag.js +41 -0
  274. package/lib/objectTypes/user.d.ts +1 -0
  275. package/lib/objectTypes/user.d.ts.map +1 -0
  276. package/lib/objectTypes/user.js +111 -0
  277. package/lib/queries/content.d.ts +1 -0
  278. package/lib/queries/content.d.ts.map +1 -0
  279. package/lib/queries/content.js +50 -0
  280. package/lib/queries/index.d.ts +1 -0
  281. package/lib/queries/index.d.ts.map +1 -0
  282. package/lib/queries/index.js +27 -0
  283. package/lib/queries/locations.d.ts +1 -0
  284. package/lib/queries/locations.d.ts.map +1 -0
  285. package/lib/queries/locations.js +23 -0
  286. package/lib/queries/messages.d.ts +1 -0
  287. package/lib/queries/messages.d.ts.map +1 -0
  288. package/lib/queries/messages.js +35 -0
  289. package/lib/queries/posts.d.ts +1 -0
  290. package/lib/queries/posts.d.ts.map +1 -0
  291. package/lib/queries/posts.js +154 -0
  292. package/lib/queries/reactions.d.ts +1 -0
  293. package/lib/queries/reactions.d.ts.map +1 -0
  294. package/lib/queries/reactions.js +34 -0
  295. package/lib/queries/statistics.d.ts +1 -0
  296. package/lib/queries/statistics.d.ts.map +1 -0
  297. package/lib/queries/statistics.js +17 -0
  298. package/lib/queries/subscriptions.d.ts +1 -0
  299. package/lib/queries/subscriptions.d.ts.map +1 -0
  300. package/lib/queries/subscriptions.js +21 -0
  301. package/lib/queries/tags.d.ts +1 -0
  302. package/lib/queries/tags.d.ts.map +1 -0
  303. package/lib/queries/tags.js +56 -0
  304. package/lib/queries/users.d.ts +1 -0
  305. package/lib/queries/users.d.ts.map +1 -0
  306. package/lib/queries/users.js +39 -0
  307. package/lib/templates/email/layout.d.ts +1 -0
  308. package/lib/templates/email/layout.d.ts.map +1 -0
  309. package/lib/templates/email/layout.js +281 -0
  310. package/lib/templates/email/passwordForgot.d.ts +1 -0
  311. package/lib/templates/email/passwordForgot.d.ts.map +1 -0
  312. package/lib/templates/email/passwordForgot.js +17 -0
  313. package/lib/templates/email/passwordRecovery.d.ts +1 -0
  314. package/lib/templates/email/passwordRecovery.d.ts.map +1 -0
  315. package/lib/templates/email/passwordRecovery.js +14 -0
  316. package/lib/templates/email/verifyEmail.d.ts +1 -0
  317. package/lib/templates/email/verifyEmail.d.ts.map +1 -0
  318. package/lib/templates/email/verifyEmail.js +17 -0
  319. package/lib/templates/email/welcome.d.ts +1 -0
  320. package/lib/templates/email/welcome.d.ts.map +1 -0
  321. package/lib/templates/email/welcome.js +17 -0
  322. package/lib/templates/sms/passwordForgot.d.ts +1 -0
  323. package/lib/templates/sms/passwordForgot.d.ts.map +1 -0
  324. package/lib/templates/sms/passwordForgot.js +3 -0
  325. package/lib/templates/sms/passwordRecovery.d.ts +1 -0
  326. package/lib/templates/sms/passwordRecovery.d.ts.map +1 -0
  327. package/lib/templates/sms/passwordRecovery.js +3 -0
  328. package/lib/templates/sms/verifyEmail.d.ts +1 -0
  329. package/lib/templates/sms/verifyEmail.d.ts.map +1 -0
  330. package/lib/templates/sms/verifyEmail.js +3 -0
  331. package/lib/templates/sms/verifyPhone.d.ts +1 -0
  332. package/lib/templates/sms/verifyPhone.d.ts.map +1 -0
  333. package/lib/templates/sms/verifyPhone.js +3 -0
  334. package/lib/templates/sms/welcome.d.ts +1 -0
  335. package/lib/templates/sms/welcome.d.ts.map +1 -0
  336. package/lib/templates/sms/welcome.js +3 -0
  337. package/lib/types/apps.types.d.ts +1 -0
  338. package/lib/types/apps.types.d.ts.map +1 -0
  339. package/lib/types/apps.types.js +10 -0
  340. package/lib/types/arangodb.types.d.ts +1 -0
  341. package/lib/types/arangodb.types.d.ts.map +1 -0
  342. package/lib/types/arangodb.types.js +6 -0
  343. package/lib/types/auth.types.d.ts +1 -0
  344. package/lib/types/auth.types.d.ts.map +1 -0
  345. package/lib/types/auth.types.js +6 -0
  346. package/lib/types/connections.types.d.ts +1 -0
  347. package/lib/types/connections.types.d.ts.map +1 -0
  348. package/lib/types/connections.types.js +6 -0
  349. package/lib/types/content.types.d.ts +1 -0
  350. package/lib/types/content.types.d.ts.map +1 -0
  351. package/lib/types/content.types.js +6 -0
  352. package/lib/types/conversations.types.d.ts +1 -0
  353. package/lib/types/conversations.types.d.ts.map +1 -0
  354. package/lib/types/conversations.types.js +6 -0
  355. package/lib/types/email.types.d.ts +1 -0
  356. package/lib/types/email.types.d.ts.map +1 -0
  357. package/lib/types/email.types.js +6 -0
  358. package/lib/types/error.types.d.ts +1 -0
  359. package/lib/types/error.types.d.ts.map +1 -0
  360. package/lib/types/error.types.js +20 -0
  361. package/lib/types/files.types.d.ts +1 -0
  362. package/lib/types/files.types.d.ts.map +1 -0
  363. package/lib/types/files.types.js +6 -0
  364. package/lib/types/google.types.d.ts +1 -0
  365. package/lib/types/google.types.d.ts.map +1 -0
  366. package/lib/types/google.types.js +6 -0
  367. package/lib/types/groups.types.d.ts +1 -0
  368. package/lib/types/groups.types.d.ts.map +1 -0
  369. package/lib/types/groups.types.js +6 -0
  370. package/lib/types/images.types.d.ts +1 -0
  371. package/lib/types/images.types.d.ts.map +1 -0
  372. package/lib/types/images.types.js +6 -0
  373. package/lib/types/index.d.ts +1 -0
  374. package/lib/types/index.d.ts.map +1 -0
  375. package/lib/types/index.js +28 -0
  376. package/lib/types/locations.types.d.ts +1 -0
  377. package/lib/types/locations.types.d.ts.map +1 -0
  378. package/lib/types/locations.types.js +6 -0
  379. package/lib/types/messages.types.d.ts +1 -0
  380. package/lib/types/messages.types.d.ts.map +1 -0
  381. package/lib/types/messages.types.js +6 -0
  382. package/lib/types/notifications.types.d.ts +1 -0
  383. package/lib/types/notifications.types.d.ts.map +1 -0
  384. package/lib/types/notifications.types.js +6 -0
  385. package/lib/types/payments.types.d.ts +1 -0
  386. package/lib/types/payments.types.d.ts.map +1 -0
  387. package/lib/types/payments.types.js +6 -0
  388. package/lib/types/posts.types.d.ts +1 -0
  389. package/lib/types/posts.types.d.ts.map +1 -0
  390. package/lib/types/posts.types.js +6 -0
  391. package/lib/types/profiles.types.d.ts +1 -0
  392. package/lib/types/profiles.types.d.ts.map +1 -0
  393. package/lib/types/profiles.types.js +3 -0
  394. package/lib/types/statistics.types.d.ts +1 -0
  395. package/lib/types/statistics.types.d.ts.map +1 -0
  396. package/lib/types/statistics.types.js +3 -0
  397. package/lib/types/tags.types.d.ts +1 -0
  398. package/lib/types/tags.types.d.ts.map +1 -0
  399. package/lib/types/tags.types.js +6 -0
  400. package/lib/types/users.types.d.ts +1 -0
  401. package/lib/types/users.types.d.ts.map +1 -0
  402. package/lib/types/users.types.js +6 -0
  403. package/lib/types/videos.types.d.ts +1 -0
  404. package/lib/types/videos.types.d.ts.map +1 -0
  405. package/lib/types/videos.types.js +6 -0
  406. package/lib/types/websockets.types.d.ts +1 -0
  407. package/lib/types/websockets.types.d.ts.map +1 -0
  408. package/lib/types/websockets.types.js +6 -0
  409. package/lib/utils/adapterUtils.d.ts +1 -0
  410. package/lib/utils/adapterUtils.d.ts.map +1 -0
  411. package/lib/utils/adapterUtils.js +23 -0
  412. package/lib/utils/analyticsUtils.d.ts +1 -0
  413. package/lib/utils/analyticsUtils.d.ts.map +1 -0
  414. package/lib/utils/analyticsUtils.js +45 -0
  415. package/lib/utils/arangodbUtils.d.ts +1 -0
  416. package/lib/utils/arangodbUtils.d.ts.map +1 -0
  417. package/lib/utils/arangodbUtils.js +130 -0
  418. package/lib/utils/authUtils.d.ts +1 -0
  419. package/lib/utils/authUtils.d.ts.map +1 -0
  420. package/lib/utils/authUtils.js +54 -0
  421. package/lib/utils/contextUtils.d.ts +1 -0
  422. package/lib/utils/contextUtils.d.ts.map +1 -0
  423. package/lib/utils/contextUtils.js +10 -0
  424. package/lib/utils/dbI18n.d.ts +1 -0
  425. package/lib/utils/dbI18n.d.ts.map +1 -0
  426. package/lib/utils/dbI18n.example.d.ts +1 -0
  427. package/lib/utils/dbI18n.example.d.ts.map +1 -0
  428. package/lib/utils/dbI18n.example.js +93 -0
  429. package/lib/utils/dbI18n.js +28 -0
  430. package/lib/utils/googleTranslate.d.ts +1 -0
  431. package/lib/utils/googleTranslate.d.ts.map +1 -0
  432. package/lib/utils/googleTranslate.js +70 -0
  433. package/lib/utils/graphqlUtils.d.ts +1 -0
  434. package/lib/utils/graphqlUtils.d.ts.map +1 -0
  435. package/lib/utils/graphqlUtils.js +11 -0
  436. package/lib/utils/index.d.ts +1 -0
  437. package/lib/utils/index.d.ts.map +1 -0
  438. package/lib/utils/index.js +19 -0
  439. package/lib/utils/languageDetection.d.ts +1 -0
  440. package/lib/utils/languageDetection.d.ts.map +1 -0
  441. package/lib/utils/languageDetection.js +120 -0
  442. package/lib/utils/localeUtils.d.ts +1 -0
  443. package/lib/utils/localeUtils.d.ts.map +1 -0
  444. package/lib/utils/localeUtils.example.d.ts +1 -0
  445. package/lib/utils/localeUtils.example.d.ts.map +1 -0
  446. package/lib/utils/localeUtils.example.js +124 -0
  447. package/lib/utils/localeUtils.js +71 -0
  448. package/lib/utils/middlewareUtils.d.ts +1 -0
  449. package/lib/utils/middlewareUtils.d.ts.map +1 -0
  450. package/lib/utils/middlewareUtils.js +10 -0
  451. package/lib/utils/sessionUtils.d.ts +1 -0
  452. package/lib/utils/sessionUtils.d.ts.map +1 -0
  453. package/lib/utils/sessionUtils.js +26 -0
  454. package/lib/utils/stripeUtils.d.ts +2 -1
  455. package/lib/utils/stripeUtils.d.ts.map +1 -0
  456. package/lib/utils/stripeUtils.js +12 -0
  457. package/lib/utils/templateUtils.d.ts +1 -0
  458. package/lib/utils/templateUtils.d.ts.map +1 -0
  459. package/lib/utils/templateUtils.js +11 -0
  460. package/lib/utils/testUtils.d.ts +1 -0
  461. package/lib/utils/testUtils.d.ts.map +1 -0
  462. package/lib/utils/testUtils.js +292 -0
  463. package/lib/utils/translationQueue.d.ts +1 -0
  464. package/lib/utils/translationQueue.d.ts.map +1 -0
  465. package/lib/utils/translationQueue.example.d.ts +1 -0
  466. package/lib/utils/translationQueue.example.d.ts.map +1 -0
  467. package/lib/utils/translationQueue.example.js +340 -0
  468. package/lib/utils/translationQueue.js +113 -0
  469. package/package.json +54 -24
  470. package/.env +0 -1
  471. package/.env.example +0 -1
  472. package/DATABASE_I18N_GUIDE.md +0 -434
  473. package/TEST_UTILITIES_GUIDE.md +0 -360
  474. package/coverage/actions/groups.ts.html +0 -1039
  475. package/coverage/actions/images.ts.html +0 -2500
  476. package/coverage/actions/index.html +0 -116
  477. package/coverage/actions/notifications.ts.html +0 -223
  478. package/coverage/actions/posts.ts.html +0 -2356
  479. package/coverage/actions/tags.ts.html +0 -1000
  480. package/coverage/adapters/arangoAdapter.ts.html +0 -301
  481. package/coverage/adapters/fileAdapter.ts.html +0 -445
  482. package/coverage/adapters/index.html +0 -176
  483. package/coverage/adapters/postAdapter.ts.html +0 -436
  484. package/coverage/adapters/reaktorAdapter.ts.html +0 -310
  485. package/coverage/adapters/tagAdapter.ts.html +0 -409
  486. package/coverage/adapters/userAdapter.ts.html +0 -829
  487. package/coverage/analyticsUtils.ts.html +0 -286
  488. package/coverage/base.css +0 -224
  489. package/coverage/block-navigation.js +0 -87
  490. package/coverage/clover.xml +0 -6
  491. package/coverage/config.ts.html +0 -766
  492. package/coverage/coverage-final.json +0 -1
  493. package/coverage/favicon.png +0 -0
  494. package/coverage/index.html +0 -221
  495. package/coverage/lcov-report/base.css +0 -224
  496. package/coverage/lcov-report/block-navigation.js +0 -87
  497. package/coverage/lcov-report/favicon.png +0 -0
  498. package/coverage/lcov-report/index.html +0 -101
  499. package/coverage/lcov-report/prettify.css +0 -1
  500. package/coverage/lcov-report/prettify.js +0 -2
  501. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  502. package/coverage/lcov-report/sorter.js +0 -196
  503. package/coverage/lcov.info +0 -0
  504. package/coverage/mocks/file.ts.html +0 -118
  505. package/coverage/mocks/group.ts.html +0 -145
  506. package/coverage/mocks/image.ts.html +0 -142
  507. package/coverage/mocks/index.html +0 -176
  508. package/coverage/mocks/post.ts.html +0 -169
  509. package/coverage/mocks/tag.ts.html +0 -121
  510. package/coverage/mocks/user.ts.html +0 -271
  511. package/coverage/prettify.css +0 -1
  512. package/coverage/prettify.js +0 -2
  513. package/coverage/sort-arrow-sprite.png +0 -0
  514. package/coverage/sorter.js +0 -210
  515. package/coverage/testUtils.ts.html +0 -1309
  516. package/coverage/translationQueue.ts.html +0 -592
  517. package/coverage/types/error.ts.html +0 -145
  518. package/coverage/types/error.types.ts.html +0 -148
  519. package/coverage/types/index.html +0 -116
  520. package/coverage/utils/adapterUtils.ts.html +0 -163
  521. package/coverage/utils/analyticsUtils.ts.html +0 -286
  522. package/coverage/utils/arangodbUtils.ts.html +0 -463
  523. package/coverage/utils/authUtils.ts.html +0 -328
  524. package/coverage/utils/dbI18n.ts.html +0 -280
  525. package/coverage/utils/googleTranslate.ts.html +0 -385
  526. package/coverage/utils/index.html +0 -131
  527. package/coverage/utils/localeUtils.ts.html +0 -193
  528. package/coverage/utils/sessionUtils.ts.html +0 -211
  529. package/coverage/utils/testUtils.ts.html +0 -1309
  530. package/index.js +0 -5
  531. package/jpg:- +0 -0
  532. package/lex.config.mjs +0 -34
  533. package/tsconfig.build.json +0 -21
  534. package/tsconfig.lint.json +0 -33
  535. package/tsconfig.test.json +0 -31
@@ -23,3 +23,4 @@ export declare const deleteApp: (context: ApiContext, app: AppType) => Promise<A
23
23
  export declare const deactivateApp: (context: ApiContext, app: AppType) => Promise<UserType>;
24
24
  export declare const getApp: (context: ApiContext, options?: AppOptions) => Promise<AppType>;
25
25
  export declare const getApps: (context: ApiContext, options?: AppOptions) => Promise<AppType[]>;
26
+ //# sourceMappingURL=apps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../src/actions/apps.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAEvD,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAC;AAKtD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,cAAc,GAAI,SAAQ,MAAM,EAAO,QAOpB,CAAC;AAEjC,eAAO,MAAM,eAAe,GAAI,UAAS,UAAe;;SAhBxC,MAAM;UACL,MAAM;WACL,MAAM;WACN,MAAM;SACR,MAAM;CAuBrB,CAAC;AAEF,eAAO,MAAM,MAAM,GAAU,SAAS,UAAU,EAAE,KAAK,OAAO,KAAG,OAAO,CAAC,QAAQ,CAmEhF,CAAC;AAEF,eAAO,MAAM,SAAS,GAAU,SAAS,UAAU,EAAE,KAAK,OAAO,KAAG,OAAO,CAAC,OAAO,CAmBlF,CAAC;AAEF,eAAO,MAAM,SAAS,GAAU,SAAS,UAAU,EAAE,KAAK,OAAO,KAAG,OAAO,CAAC,OAAO,CA0BlF,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,SAAS,UAAU,EAAE,KAAK,OAAO,KAAG,OAAO,CAAC,QAAQ,CAyBjF,CAAC;AAEF,eAAO,MAAM,MAAM,GAAI,SAAS,UAAU,EAAE,UAAU,UAAU,KAAG,OAAO,CAAC,OAAO,CAwCjF,CAAC;AAEF,eAAO,MAAM,OAAO,GAAU,SAAS,UAAU,EAAE,UAAU,UAAU,KAAG,OAAO,CAAC,OAAO,EAAE,CAiC1F,CAAC"}
@@ -0,0 +1,221 @@
1
+ /**
2
+ * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */ import { aql } from 'arangojs';
5
+ import { logError, logException, UserError } from '../utils/analyticsUtils.js';
6
+ import { getDocId, getLimit, selectReactionCountByType, useDb } from '../utils/arangodbUtils.js';
7
+ import { isAdminUser } from '../utils/sessionUtils.js';
8
+ import { createHash, parseArangoId, parseEmail, parseId, parsePhone, parseString } from '@nlabs/utils/parsers/strings';
9
+ import { ErrorTypes } from '../types/error.types.js';
10
+ const eventCategory = 'apps';
11
+ export const getAppOptional = (fields = [])=>fields.reduce((selects, field)=>{
12
+ if (field.includes('Count')) {
13
+ return selectReactionCountByType('apps', 'a', field, selects);
14
+ }
15
+ return selects;
16
+ }, {
17
+ objects: [],
18
+ queries: []
19
+ });
20
+ export const parseAppOptions = (options = {})=>{
21
+ const { from = 0, to = 30 } = options;
22
+ const limit = getLimit(from, to);
23
+ return {
24
+ ...options,
25
+ limit
26
+ };
27
+ };
28
+ export const addApp = async (context, app)=>{
29
+ const action = 'addUser';
30
+ const { databaseName } = context;
31
+ const { email = '', name = '', phone = '' } = app;
32
+ const formatName = parseString(name);
33
+ const formatEmail = parseEmail(email);
34
+ const formatPhone = parsePhone(phone);
35
+ if (!formatName) {
36
+ throw logException({
37
+ action,
38
+ category: eventCategory,
39
+ params: {
40
+ name
41
+ },
42
+ value: ErrorTypes.INVALID_ARGUMENTS
43
+ }, context);
44
+ }
45
+ const filters = [
46
+ `a.name == "${formatName}"`
47
+ ];
48
+ if (formatEmail) {
49
+ filters.push(`a.email == "${formatEmail}"`);
50
+ }
51
+ const checkQuery = `FOR u IN users
52
+ FILTER ${filters.join(' || ')}
53
+ RETURN u`;
54
+ try {
55
+ const existingApps = await useDb(databaseName).query(checkQuery).then((cursor)=>cursor.all());
56
+ if (existingApps.length) {
57
+ throw logException({
58
+ action,
59
+ category: eventCategory,
60
+ params: {
61
+ name
62
+ },
63
+ value: ErrorTypes.EXISTING_ITEM
64
+ }, context);
65
+ }
66
+ } catch (error) {
67
+ throw logError({
68
+ action,
69
+ category: eventCategory,
70
+ label: ErrorTypes.DATABASE_ERROR,
71
+ params: {
72
+ name
73
+ }
74
+ }, error, context);
75
+ }
76
+ const insert = {
77
+ _key: createHash(name),
78
+ active: true,
79
+ added: Date.now(),
80
+ email: formatEmail,
81
+ modified: Date.now(),
82
+ name: formatName,
83
+ phone: formatPhone
84
+ };
85
+ const insertQuery = aql`INSERT ${insert} IN apps RETURN NEW`;
86
+ return await useDb(databaseName).query(insertQuery).then((cursor)=>cursor.next() || {}).catch((error)=>logError({
87
+ action,
88
+ category: eventCategory,
89
+ label: ErrorTypes.DATABASE_ERROR,
90
+ params: {
91
+ name
92
+ }
93
+ }, error, context));
94
+ };
95
+ export const updateApp = async (context, app)=>{
96
+ const action = 'updateApp';
97
+ const { databaseName } = context;
98
+ const { _key, _id, id, appId, ...updated } = app;
99
+ const appDocId = getDocId('apps', app);
100
+ const appQuery = aql`LET a = DOCUMENT(${appDocId})
101
+ UPDATE a WITH ${updated} IN apps
102
+ RETURN NEW`;
103
+ return await useDb(databaseName).query(appQuery).then((cursor)=>cursor.next()).catch((error)=>logError({
104
+ action,
105
+ category: eventCategory,
106
+ label: ErrorTypes.DATABASE_ERROR,
107
+ params: {
108
+ app
109
+ }
110
+ }, error, context));
111
+ };
112
+ export const deleteApp = async (context, app)=>{
113
+ const action = 'deleteApp';
114
+ const { databaseName, session = {} } = context;
115
+ const isAdmin = isAdminUser(session);
116
+ const appDocId = getDocId('apps', app);
117
+ if (!isAdmin) {
118
+ return Promise.reject(new UserError(ErrorTypes.INVALID_SESSION));
119
+ }
120
+ const aqlQuery = aql`FOR a IN apps
121
+ FILTER a._id == \"${appDocId}\"
122
+ LIMIT 1
123
+ REMOVE a IN apps
124
+ RETURN OLD`;
125
+ return useDb(databaseName).query(aqlQuery).then((cursor)=>cursor.next()).catch((error)=>{
126
+ throw logError({
127
+ action,
128
+ category: eventCategory,
129
+ label: ErrorTypes.DATABASE_ERROR,
130
+ params: app
131
+ }, error, context);
132
+ });
133
+ };
134
+ export const deactivateApp = (context, app)=>{
135
+ const action = 'deactivateApp';
136
+ const { databaseName, session = {} } = context;
137
+ const isAdmin = isAdminUser(session);
138
+ const appDocId = getDocId('apps', app);
139
+ if (!isAdmin) {
140
+ return Promise.reject(new UserError(ErrorTypes.INVALID_SESSION));
141
+ }
142
+ const updated = {
143
+ active: false
144
+ };
145
+ const aqlQuery = aql`UPDATE ${appDocId} WITH ${updated} IN apps LIMIT 1 RETURN NEW`;
146
+ return useDb(databaseName).query(aqlQuery).then((cursor)=>cursor.next()).catch((error)=>{
147
+ throw logError({
148
+ action,
149
+ category: eventCategory,
150
+ label: ErrorTypes.DATABASE_ERROR,
151
+ params: app
152
+ }, error, context);
153
+ });
154
+ };
155
+ export const getApp = (context, options)=>{
156
+ const action = 'getApp';
157
+ const { databaseName, fields, session = {} } = context;
158
+ const { id, key, name } = parseAppOptions(options);
159
+ const { objects: selectObjects, queries: selectQueries } = getAppOptional(fields);
160
+ const filterBy = [
161
+ 'a.active == true'
162
+ ];
163
+ const isAdmin = isAdminUser(session);
164
+ if (!isAdmin) {
165
+ return Promise.reject(new UserError(ErrorTypes.INVALID_SESSION));
166
+ }
167
+ if (id) {
168
+ filterBy.push(`a._id == "${parseArangoId(id)}"`);
169
+ }
170
+ if (key) {
171
+ filterBy.push(`a._key == "apps/${parseId(key)}"`);
172
+ }
173
+ if (name) {
174
+ filterBy.push(`CONTAINS(a.name, "${parseString(name)}")`);
175
+ }
176
+ // Get data from database
177
+ const aqlQuery = `FOR a IN apps
178
+ FILTER ${filterBy.join(' && ')}
179
+ ${selectQueries.join('\n')}
180
+ RETURN MERGE(a, {${selectObjects.join(', ')}})`;
181
+ return useDb(databaseName).query(aqlQuery).then((cursor)=>cursor.next()).catch((error)=>{
182
+ throw logError({
183
+ action,
184
+ category: eventCategory,
185
+ label: ErrorTypes.DATABASE_ERROR,
186
+ params: options
187
+ }, error, context);
188
+ });
189
+ };
190
+ export const getApps = async (context, options)=>{
191
+ const action = 'getApps';
192
+ const { databaseName, fields, session = {} } = context;
193
+ const { limit, name } = parseAppOptions(options);
194
+ const { objects: selectObjects, queries: selectQueries } = getAppOptional(fields);
195
+ const filterBy = [
196
+ 'a.active == true'
197
+ ];
198
+ const isAdmin = isAdminUser(session);
199
+ if (!isAdmin) {
200
+ return Promise.reject(new UserError(ErrorTypes.INVALID_SESSION));
201
+ }
202
+ if (name) {
203
+ filterBy.push(`CONTAINS(a.name, "${parseString(name)}")`);
204
+ }
205
+ const aqlQuery = `FOR a IN apps
206
+ FILTER ${filterBy.join(' && ')}
207
+ ${selectQueries.join('\n')}
208
+ ${limit.aql}
209
+ SORT a.name
210
+ RETURN MERGE(a, {${selectObjects.join(', ')}})`;
211
+ return useDb(databaseName).query(aqlQuery).then((cursor)=>cursor.all()).catch((error)=>{
212
+ throw logError({
213
+ action,
214
+ category: eventCategory,
215
+ label: ErrorTypes.DATABASE_ERROR,
216
+ params: options
217
+ }, error, context);
218
+ });
219
+ };
220
+
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvYXBwcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB0eXBlIHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcblxuaW1wb3J0IHtsb2dFcnJvciwgbG9nRXhjZXB0aW9uLCBVc2VyRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7Z2V0RG9jSWQsIGdldExpbWl0LCBzZWxlY3RSZWFjdGlvbkNvdW50QnlUeXBlLCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2lzQWRtaW5Vc2VyfSBmcm9tICcuLi91dGlscy9zZXNzaW9uVXRpbHMuanMnO1xuXG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlQXJhbmdvSWQsIHBhcnNlRW1haWwsIHBhcnNlSWQsIHBhcnNlUGhvbmUsIHBhcnNlU3RyaW5nfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB0eXBlIHtBcHBUeXBlfSBmcm9tICcuLi90eXBlcy9hcHBzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1VzZXJUeXBlfSBmcm9tICcuLi90eXBlcy91c2Vycy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7U2Vzc2lvbn0gZnJvbSAnLi4vdXRpbHMvc2Vzc2lvblV0aWxzLmpzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ2FwcHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwcE9wdGlvbnMge1xuICByZWFkb25seSBpZD86IHN0cmluZztcbiAgcmVhZG9ubHkga2V5Pzogc3RyaW5nO1xuICByZWFkb25seSBmcm9tPzogbnVtYmVyO1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSB0bz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IGdldEFwcE9wdGlvbmFsID0gKGZpZWxkczogc3RyaW5nW10gPSBbXSkgPT5cbiAgZmllbGRzLnJlZHVjZSgoc2VsZWN0cywgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGlmKGZpZWxkLmluY2x1ZGVzKCdDb3VudCcpKSB7XG4gICAgICByZXR1cm4gc2VsZWN0UmVhY3Rpb25Db3VudEJ5VHlwZSgnYXBwcycsICdhJywgZmllbGQsIHNlbGVjdHMpO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxlY3RzO1xuICB9LCB7b2JqZWN0czogW10sIHF1ZXJpZXM6IFtdfSk7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUFwcE9wdGlvbnMgPSAob3B0aW9uczogQXBwT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmcm9tID0gMCxcbiAgICB0byA9IDMwXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBsaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcblxuICByZXR1cm4ge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgbGltaXRcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRBcHAgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgYXBwOiBBcHBUeXBlKTogUHJvbWlzZTxVc2VyVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkVXNlcic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qge2VtYWlsID0gJycsIG5hbWUgPSAnJywgcGhvbmUgPSAnJ30gPSBhcHA7XG4gIGNvbnN0IGZvcm1hdE5hbWUgPSBwYXJzZVN0cmluZyhuYW1lKTtcbiAgY29uc3QgZm9ybWF0RW1haWwgPSBwYXJzZUVtYWlsKGVtYWlsKTtcbiAgY29uc3QgZm9ybWF0UGhvbmUgPSBwYXJzZVBob25lKHBob25lKTtcblxuICBpZighZm9ybWF0TmFtZSkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge25hbWV9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9BUkdVTUVOVFNcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gW2BhLm5hbWUgPT0gXCIke2Zvcm1hdE5hbWV9XCJgXTtcblxuICBpZihmb3JtYXRFbWFpbCkge1xuICAgIGZpbHRlcnMucHVzaChgYS5lbWFpbCA9PSBcIiR7Zm9ybWF0RW1haWx9XCJgKTtcbiAgfVxuXG4gIGNvbnN0IGNoZWNrUXVlcnk6IHN0cmluZyA9IGBGT1IgdSBJTiB1c2Vyc1xuICAgIEZJTFRFUiAke2ZpbHRlcnMuam9pbignIHx8ICcpfVxuICAgIFJFVFVSTiB1YDtcblxuICB0cnkge1xuICAgIGNvbnN0IGV4aXN0aW5nQXBwcyA9IGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoY2hlY2tRdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xuXG4gICAgaWYoZXhpc3RpbmdBcHBzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7bmFtZX0sXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkVYSVNUSU5HX0lURU1cbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH1cbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1IsXG4gICAgICBwYXJhbXM6IHtuYW1lfVxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IGluc2VydDogQXBwVHlwZSA9IHtcbiAgICBfa2V5OiBjcmVhdGVIYXNoKG5hbWUpLFxuICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICBhZGRlZDogRGF0ZS5ub3coKSxcbiAgICBlbWFpbDogZm9ybWF0RW1haWwsXG4gICAgbW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgbmFtZTogZm9ybWF0TmFtZSxcbiAgICBwaG9uZTogZm9ybWF0UGhvbmVcbiAgfTtcblxuICBjb25zdCBpbnNlcnRRdWVyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBhcHBzIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGluc2VydFF1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkgfHwge30pXG4gICAgLmNhdGNoKChlcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUixcbiAgICAgIHBhcmFtczoge25hbWV9XG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVBcHAgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgYXBwOiBBcHBUeXBlKTogUHJvbWlzZTxBcHBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ3VwZGF0ZUFwcCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qge19rZXksIF9pZCwgaWQsIGFwcElkLCAuLi51cGRhdGVkfSA9IGFwcDtcbiAgY29uc3QgYXBwRG9jSWQgPSBnZXREb2NJZCgnYXBwcycsIGFwcCk7XG4gIGNvbnN0IGFwcFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBMRVQgYSA9IERPQ1VNRU5UKCR7YXBwRG9jSWR9KVxuICAgIFVQREFURSBhIFdJVEggJHt1cGRhdGVkfSBJTiBhcHBzXG4gICAgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXBwUXVlcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yKSA9PlxuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUixcbiAgICAgICAgcGFyYW1zOiB7YXBwfVxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpXG4gICAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVBcHAgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgYXBwOiBBcHBUeXBlKTogUHJvbWlzZTxBcHBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZUFwcCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb24gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBpc0FkbWluID0gaXNBZG1pblVzZXIoc2Vzc2lvbiBhcyBTZXNzaW9uKTtcbiAgY29uc3QgYXBwRG9jSWQgPSBnZXREb2NJZCgnYXBwcycsIGFwcCk7XG5cbiAgaWYoIWlzQWRtaW4pIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFVzZXJFcnJvcihFcnJvclR5cGVzLklOVkFMSURfU0VTU0lPTikpO1xuICB9XG5cbiAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBhIElOIGFwcHNcbiAgICBGSUxURVIgYS5faWQgPT0gXFxcIiR7YXBwRG9jSWR9XFxcIlxuICAgIExJTUlUIDFcbiAgICBSRU1PVkUgYSBJTiBhcHBzXG4gICAgUkVUVVJOIE9MRGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXVlcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yKSA9PntcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1IsXG4gICAgICAgIHBhcmFtczogYXBwIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVhY3RpdmF0ZUFwcCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBhcHA6IEFwcFR5cGUpOiBQcm9taXNlPFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlYWN0aXZhdGVBcHAnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uID0ge319ID0gY29udGV4dDtcbiAgY29uc3QgaXNBZG1pbiA9IGlzQWRtaW5Vc2VyKHNlc3Npb24gYXMgU2Vzc2lvbik7XG4gIGNvbnN0IGFwcERvY0lkID0gZ2V0RG9jSWQoJ2FwcHMnLCBhcHApO1xuXG4gIGlmKCFpc0FkbWluKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBVc2VyRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX1NFU1NJT04pKTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZWQ6IEFwcFR5cGUgPSB7XG4gICAgYWN0aXZlOiBmYWxzZVxuICB9O1xuICBjb25zdCBhcWxRdWVyeTogQXFsUXVlcnkgPSBhcWxgVVBEQVRFICR7YXBwRG9jSWR9IFdJVEggJHt1cGRhdGVkfSBJTiBhcHBzIExJTUlUIDEgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXVlcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUixcbiAgICAgICAgcGFyYW1zOiBhcHAgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBcHAgPSAoY29udGV4dDogQXBpQ29udGV4dCwgb3B0aW9ucz86IEFwcE9wdGlvbnMpOiBQcm9taXNlPEFwcFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0QXBwJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzLCBzZXNzaW9uID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2lkLCBrZXksIG5hbWV9ID0gcGFyc2VBcHBPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRBcHBPcHRpb25hbChmaWVsZHMpO1xuICBjb25zdCBmaWx0ZXJCeTogc3RyaW5nW10gPSBbJ2EuYWN0aXZlID09IHRydWUnXTtcbiAgY29uc3QgaXNBZG1pbiA9IGlzQWRtaW5Vc2VyKHNlc3Npb24gYXMgU2Vzc2lvbik7XG5cbiAgaWYoIWlzQWRtaW4pIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFVzZXJFcnJvcihFcnJvclR5cGVzLklOVkFMSURfU0VTU0lPTikpO1xuICB9XG5cbiAgaWYoaWQpIHtcbiAgICBmaWx0ZXJCeS5wdXNoKGBhLl9pZCA9PSBcIiR7cGFyc2VBcmFuZ29JZChpZCl9XCJgKTtcbiAgfVxuXG4gIGlmKGtleSkge1xuICAgIGZpbHRlckJ5LnB1c2goYGEuX2tleSA9PSBcImFwcHMvJHtwYXJzZUlkKGtleSl9XCJgKTtcbiAgfVxuXG4gIGlmKG5hbWUpIHtcbiAgICBmaWx0ZXJCeS5wdXNoKGBDT05UQUlOUyhhLm5hbWUsIFwiJHtwYXJzZVN0cmluZyhuYW1lKX1cIilgKTtcbiAgfVxuXG4gIC8vIEdldCBkYXRhIGZyb20gZGF0YWJhc2VcbiAgY29uc3QgYXFsUXVlcnk6IHN0cmluZyA9IGBGT1IgYSBJTiBhcHBzXG4gICAgRklMVEVSICR7ZmlsdGVyQnkuam9pbignICYmICcpfVxuICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICBSRVRVUk4gTUVSR0UoYSwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRdWVyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpIGFzIHVua25vd24gYXMgQXBwVHlwZSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUixcbiAgICAgICAgcGFyYW1zOiBvcHRpb25zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXBwcyA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBvcHRpb25zPzogQXBwT3B0aW9ucyk6IFByb21pc2U8QXBwVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldEFwcHMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMsIHNlc3Npb24gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXQsIG5hbWV9ID0gcGFyc2VBcHBPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRBcHBPcHRpb25hbChmaWVsZHMpO1xuICBjb25zdCBmaWx0ZXJCeTogc3RyaW5nW10gPSBbJ2EuYWN0aXZlID09IHRydWUnXTtcbiAgY29uc3QgaXNBZG1pbiA9IGlzQWRtaW5Vc2VyKHNlc3Npb24gYXMgU2Vzc2lvbik7XG5cbiAgaWYoIWlzQWRtaW4pIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFVzZXJFcnJvcihFcnJvclR5cGVzLklOVkFMSURfU0VTU0lPTikpO1xuICB9XG5cbiAgaWYobmFtZSkge1xuICAgIGZpbHRlckJ5LnB1c2goYENPTlRBSU5TKGEubmFtZSwgXCIke3BhcnNlU3RyaW5nKG5hbWUpfVwiKWApO1xuICB9XG5cbiAgY29uc3QgYXFsUXVlcnk6IHN0cmluZyA9IGBGT1IgYSBJTiBhcHBzXG4gICAgRklMVEVSICR7ZmlsdGVyQnkuam9pbignICYmICcpfVxuICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICAke2xpbWl0LmFxbH1cbiAgICBTT1JUIGEubmFtZVxuICAgIFJFVFVSTiBNRVJHRShhLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFF1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEFwcFR5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUixcbiAgICAgICAgcGFyYW1zOiBvcHRpb25zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgfSk7XG59O1xuIl0sIm5hbWVzIjpbImFxbCIsImxvZ0Vycm9yIiwibG9nRXhjZXB0aW9uIiwiVXNlckVycm9yIiwiZ2V0RG9jSWQiLCJnZXRMaW1pdCIsInNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGUiLCJ1c2VEYiIsImlzQWRtaW5Vc2VyIiwiY3JlYXRlSGFzaCIsInBhcnNlQXJhbmdvSWQiLCJwYXJzZUVtYWlsIiwicGFyc2VJZCIsInBhcnNlUGhvbmUiLCJwYXJzZVN0cmluZyIsIkVycm9yVHlwZXMiLCJldmVudENhdGVnb3J5IiwiZ2V0QXBwT3B0aW9uYWwiLCJmaWVsZHMiLCJyZWR1Y2UiLCJzZWxlY3RzIiwiZmllbGQiLCJpbmNsdWRlcyIsIm9iamVjdHMiLCJxdWVyaWVzIiwicGFyc2VBcHBPcHRpb25zIiwib3B0aW9ucyIsImZyb20iLCJ0byIsImxpbWl0IiwiYWRkQXBwIiwiY29udGV4dCIsImFwcCIsImFjdGlvbiIsImRhdGFiYXNlTmFtZSIsImVtYWlsIiwibmFtZSIsInBob25lIiwiZm9ybWF0TmFtZSIsImZvcm1hdEVtYWlsIiwiZm9ybWF0UGhvbmUiLCJjYXRlZ29yeSIsInBhcmFtcyIsInZhbHVlIiwiSU5WQUxJRF9BUkdVTUVOVFMiLCJmaWx0ZXJzIiwicHVzaCIsImNoZWNrUXVlcnkiLCJqb2luIiwiZXhpc3RpbmdBcHBzIiwicXVlcnkiLCJ0aGVuIiwiY3Vyc29yIiwiYWxsIiwibGVuZ3RoIiwiRVhJU1RJTkdfSVRFTSIsImVycm9yIiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsImluc2VydCIsIl9rZXkiLCJhY3RpdmUiLCJhZGRlZCIsIkRhdGUiLCJub3ciLCJtb2RpZmllZCIsImluc2VydFF1ZXJ5IiwibmV4dCIsImNhdGNoIiwidXBkYXRlQXBwIiwiX2lkIiwiaWQiLCJhcHBJZCIsInVwZGF0ZWQiLCJhcHBEb2NJZCIsImFwcFF1ZXJ5IiwiZGVsZXRlQXBwIiwic2Vzc2lvbiIsImlzQWRtaW4iLCJQcm9taXNlIiwicmVqZWN0IiwiSU5WQUxJRF9TRVNTSU9OIiwiYXFsUXVlcnkiLCJkZWFjdGl2YXRlQXBwIiwiZ2V0QXBwIiwia2V5Iiwic2VsZWN0T2JqZWN0cyIsInNlbGVjdFF1ZXJpZXMiLCJmaWx0ZXJCeSIsImdldEFwcHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLEdBQUcsUUFBTyxXQUFXO0FBRzdCLFNBQVFDLFFBQVEsRUFBRUMsWUFBWSxFQUFFQyxTQUFTLFFBQU8sNkJBQTZCO0FBQzdFLFNBQVFDLFFBQVEsRUFBRUMsUUFBUSxFQUFFQyx5QkFBeUIsRUFBRUMsS0FBSyxRQUFPLDRCQUE0QjtBQUMvRixTQUFRQyxXQUFXLFFBQU8sMkJBQTJCO0FBRXJELFNBQVFDLFVBQVUsRUFBRUMsYUFBYSxFQUFFQyxVQUFVLEVBQUVDLE9BQU8sRUFBRUMsVUFBVSxFQUFFQyxXQUFXLFFBQU8sK0JBQStCO0FBR3JILFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFJbkQsTUFBTUMsZ0JBQXdCO0FBVTlCLE9BQU8sTUFBTUMsaUJBQWlCLENBQUNDLFNBQW1CLEVBQUUsR0FDbERBLE9BQU9DLE1BQU0sQ0FBQyxDQUFDQyxTQUFTQztRQUN0QixJQUFHQSxNQUFNQyxRQUFRLENBQUMsVUFBVTtZQUMxQixPQUFPaEIsMEJBQTBCLFFBQVEsS0FBS2UsT0FBT0Q7UUFDdkQ7UUFFQSxPQUFPQTtJQUNULEdBQUc7UUFBQ0csU0FBUyxFQUFFO1FBQUVDLFNBQVMsRUFBRTtJQUFBLEdBQUc7QUFFakMsT0FBTyxNQUFNQyxrQkFBa0IsQ0FBQ0MsVUFBc0IsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sRUFD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
@@ -3,3 +3,4 @@ import type { ConnectionType } from '../types/connections.types.js';
3
3
  export declare const addConnection: (context: ApiContext, fromType: string, fromId: string, toType: string, toId: string, value?: string) => Promise<boolean>;
4
4
  export declare const getConnection: (context: ApiContext, fromType: string, fromId: string, toType: string, toId: string) => Promise<ConnectionType>;
5
5
  export declare const deleteConnection: (context: ApiContext, fromType: string, fromId: string, toType: string, toId: string) => Promise<boolean>;
6
+ //# sourceMappingURL=connections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connections.d.ts","sourceRoot":"","sources":["../../src/actions/connections.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,+BAA+B,CAAC;AAIlE,eAAO,MAAM,aAAa,GACxB,SAAS,UAAU,EACnB,UAAU,MAAM,EAChB,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,MAAM,MAAM,EACZ,QAAQ,MAAM,KACb,OAAO,CAAC,OAAO,CAyBjB,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,SAAS,UAAU,EACnB,UAAU,MAAM,EAChB,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,MAAM,MAAM,KACX,OAAO,CAAC,cAAc,CAkBxB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,SAAS,UAAU,EACnB,UAAU,MAAM,EAChB,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,MAAM,MAAM,KACX,OAAO,CAAC,OAAO,CAqBjB,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { parseArangoId, parseString } from '@nlabs/utils/parsers/strings';
2
+ import { aql } from 'arangojs';
3
+ import { ErrorTypes } from '../types/error.types.js';
4
+ import { logError } from '../utils/analyticsUtils.js';
5
+ import { useDb } from '../utils/arangodbUtils.js';
6
+ const eventCategory = 'connections';
7
+ export const addConnection = (context, fromType, fromId, toType, toId, value)=>{
8
+ const action = 'addConnection';
9
+ const { databaseName } = context;
10
+ const formatFromDocId = parseArangoId(`${fromType}/${fromId}`);
11
+ const formatToDocId = parseArangoId(`${toType}/${toId}`);
12
+ const insert = {
13
+ _from: formatFromDocId,
14
+ _to: formatToDocId,
15
+ isDirect: true,
16
+ type: toType,
17
+ value: !!value ? parseString(value, 32) : undefined
18
+ };
19
+ const aqlQry = aql`INSERT ${insert} IN hasConnection`;
20
+ return useDb(databaseName).query(aqlQry).then(()=>true).catch((error)=>{
21
+ logError({
22
+ action,
23
+ category: eventCategory,
24
+ label: ErrorTypes.DATABASE_ERROR
25
+ }, error, context);
26
+ return false;
27
+ });
28
+ };
29
+ export const getConnection = (context, fromType, fromId, toType, toId)=>{
30
+ const action = 'getConnection';
31
+ const { databaseName } = context;
32
+ const formatFromDocId = parseArangoId(`${fromType}/${fromId}`);
33
+ const formatToDocId = parseArangoId(`${toType}/${toId}`);
34
+ const aqlQry = aql`FOR hc in hasConnection
35
+ FILTER hc._from == ${formatFromDocId} && hc._to == ${formatToDocId}
36
+ LIMIT 1`;
37
+ return useDb(databaseName).query(aqlQry).then((cursor)=>cursor.next()).catch((error)=>logError({
38
+ action,
39
+ category: eventCategory,
40
+ label: ErrorTypes.DATABASE_ERROR
41
+ }, error, context));
42
+ };
43
+ export const deleteConnection = (context, fromType, fromId, toType, toId)=>{
44
+ const action = 'deleteReactionByItem';
45
+ const { databaseName } = context;
46
+ const formatFromDocId = parseArangoId(`${fromType}/${fromId}`);
47
+ const formatToDocId = parseArangoId(`${toType}/${toId}`);
48
+ const aqlQry = aql`FOR hc in hasConnection
49
+ FILTER hc._from == ${formatFromDocId} && hc._to == ${formatToDocId}
50
+ LIMIT 1
51
+ REMOVE hc IN hasConnection`;
52
+ return useDb(databaseName).query(aqlQry).then(()=>true).catch((error)=>{
53
+ logError({
54
+ action,
55
+ category: eventCategory,
56
+ label: ErrorTypes.DATABASE_ERROR
57
+ }, error, context);
58
+ return false;
59
+ });
60
+ };
61
+
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvY29ubmVjdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQge3BhcnNlQXJhbmdvSWQsIHBhcnNlU3RyaW5nfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5cbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5cbmltcG9ydCB0eXBlIHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtDb25uZWN0aW9uVHlwZX0gZnJvbSAnLi4vdHlwZXMvY29ubmVjdGlvbnMudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAnY29ubmVjdGlvbnMnO1xuXG5leHBvcnQgY29uc3QgYWRkQ29ubmVjdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgZnJvbVR5cGU6IHN0cmluZyxcbiAgZnJvbUlkOiBzdHJpbmcsXG4gIHRvVHlwZTogc3RyaW5nLFxuICB0b0lkOiBzdHJpbmcsXG4gIHZhbHVlPzogc3RyaW5nXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkQ29ubmVjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcblxuICBjb25zdCBmb3JtYXRGcm9tRG9jSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoYCR7ZnJvbVR5cGV9LyR7ZnJvbUlkfWApO1xuICBjb25zdCBmb3JtYXRUb0RvY0lkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGAke3RvVHlwZX0vJHt0b0lkfWApO1xuICBjb25zdCBpbnNlcnQgPSB7XG4gICAgX2Zyb206IGZvcm1hdEZyb21Eb2NJZCxcbiAgICBfdG86IGZvcm1hdFRvRG9jSWQsXG4gICAgaXNEaXJlY3Q6IHRydWUsXG4gICAgdHlwZTogdG9UeXBlLFxuICAgIHZhbHVlOiAhIXZhbHVlID8gcGFyc2VTdHJpbmcodmFsdWUsIDMyKSA6IHVuZGVmaW5lZFxuICB9O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2luc2VydH0gSU4gaGFzQ29ubmVjdGlvbmA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKCgpID0+IHRydWUpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb25uZWN0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBmcm9tVHlwZTogc3RyaW5nLFxuICBmcm9tSWQ6IHN0cmluZyxcbiAgdG9UeXBlOiBzdHJpbmcsXG4gIHRvSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxDb25uZWN0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRDb25uZWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuXG4gIGNvbnN0IGZvcm1hdEZyb21Eb2NJZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChgJHtmcm9tVHlwZX0vJHtmcm9tSWR9YCk7XG4gIGNvbnN0IGZvcm1hdFRvRG9jSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoYCR7dG9UeXBlfS8ke3RvSWR9YCk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgaGMgaW4gaGFzQ29ubmVjdGlvblxuICAgIEZJTFRFUiBoYy5fZnJvbSA9PSAke2Zvcm1hdEZyb21Eb2NJZH0gJiYgaGMuX3RvID09ICR7Zm9ybWF0VG9Eb2NJZH1cbiAgICBMSU1JVCAxYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlQ29ubmVjdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgZnJvbVR5cGU6IHN0cmluZyxcbiAgZnJvbUlkOiBzdHJpbmcsXG4gIHRvVHlwZTogc3RyaW5nLFxuICB0b0lkOiBzdHJpbmdcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdkZWxldGVSZWFjdGlvbkJ5SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0RnJvbURvY0lkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGAke2Zyb21UeXBlfS8ke2Zyb21JZH1gKTtcbiAgY29uc3QgZm9ybWF0VG9Eb2NJZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChgJHt0b1R5cGV9LyR7dG9JZH1gKTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBoYyBpbiBoYXNDb25uZWN0aW9uXG4gICAgRklMVEVSIGhjLl9mcm9tID09ICR7Zm9ybWF0RnJvbURvY0lkfSAmJiBoYy5fdG8gPT0gJHtmb3JtYXRUb0RvY0lkfVxuICAgIExJTUlUIDFcbiAgICBSRU1PVkUgaGMgSU4gaGFzQ29ubmVjdGlvbmA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKCgpID0+IHRydWUpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbn07XG4iXSwibmFtZXMiOlsicGFyc2VBcmFuZ29JZCIsInBhcnNlU3RyaW5nIiwiYXFsIiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwidXNlRGIiLCJldmVudENhdGVnb3J5IiwiYWRkQ29ubmVjdGlvbiIsImNvbnRleHQiLCJmcm9tVHlwZSIsImZyb21JZCIsInRvVHlwZSIsInRvSWQiLCJ2YWx1ZSIsImFjdGlvbiIsImRhdGFiYXNlTmFtZSIsImZvcm1hdEZyb21Eb2NJZCIsImZvcm1hdFRvRG9jSWQiLCJpbnNlcnQiLCJfZnJvbSIsIl90byIsImlzRGlyZWN0IiwidHlwZSIsInVuZGVmaW5lZCIsImFxbFFyeSIsInF1ZXJ5IiwidGhlbiIsImNhdGNoIiwiZXJyb3IiLCJjYXRlZ29yeSIsImxhYmVsIiwiREFUQUJBU0VfRVJST1IiLCJnZXRDb25uZWN0aW9uIiwiY3Vyc29yIiwibmV4dCIsImRlbGV0ZUNvbm5lY3Rpb24iXSwibWFwcGluZ3MiOiJBQUNBLFNBQVFBLGFBQWEsRUFBRUMsV0FBVyxRQUFPLCtCQUErQjtBQUN4RSxTQUFR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
@@ -11,3 +11,4 @@ export declare const getContentWithFallback: (context: ApiContext, key: string,
11
11
  export declare const addContent: (context: ApiContext, contentInput: ContentInputType) => Promise<ContentType>;
12
12
  export declare const updateContent: (context: ApiContext, contentInput: ContentInputType) => Promise<ContentType>;
13
13
  export declare const searchContent: (context: ApiContext, options?: ContentOptions) => Promise<ContentType[]>;
14
+ //# sourceMappingURL=content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/actions/content.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAC,gBAAgB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAC,MAAM,2BAA2B,CAAC;AAIrG,eAAO,MAAM,mBAAmB,GAAI,UAAS,cAAmB;;;;;CAc/D,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,SAAS,UAAU,EACnB,KAAK,MAAM,EACX,SAAQ,MAAa,KACpB,OAAO,CAAC,WAAW,GAAG,IAAI,CA2B5B,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,SAAS,UAAU,EACnB,KAAK,MAAM,EACX,iBAAiB,MAAM,EACvB,SAAQ,MAAa,KACpB,OAAO,CAAC,MAAM,CA6FhB,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,SAAS,UAAU,EACnB,cAAc,gBAAgB,KAC7B,OAAO,CAAC,WAAW,CAqCrB,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,SAAS,UAAU,EACnB,cAAc,gBAAgB,KAC7B,OAAO,CAAC,WAAW,CAmDrB,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,SAAS,UAAU,EACnB,UAAS,cAAmB,KAC3B,OAAO,CAAC,WAAW,EAAE,CAmDvB,CAAC"}
@@ -0,0 +1,240 @@
1
+ /**
2
+ * Copyright (c) 2025-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */ import { createHash, parseString } from '@nlabs/utils/parsers/strings';
5
+ import { aql } from 'arangojs';
6
+ import { parseContentFromDb, parseContentInput } from '../adapters/contentAdapter.js';
7
+ import { Config } from '../config.js';
8
+ import { ErrorTypes } from '../types/error.types.js';
9
+ import { logError } from '../utils/analyticsUtils.js';
10
+ import { useDb } from '../utils/arangodbUtils.js';
11
+ import { translateText } from '../utils/googleTranslate.js';
12
+ import { extractLanguage, isRegionalLocale } from '../utils/localeUtils.js';
13
+ const eventCategory = 'content';
14
+ export const parseContentOptions = (options = {})=>{
15
+ const { category, isActive = true, key, locale } = options;
16
+ return {
17
+ category: category ? parseString(category, 100) : undefined,
18
+ isActive,
19
+ key: key ? parseString(key, 200) : undefined,
20
+ locale
21
+ };
22
+ };
23
+ export const getContent = async (context, key, locale = 'en')=>{
24
+ const action = 'getContent';
25
+ const { databaseName } = context;
26
+ const formatKey = parseString(key, 200);
27
+ const formatLocale = parseString(locale, 5);
28
+ const aqlQry = aql`
29
+ FOR c IN content
30
+ FILTER c.key == ${formatKey} && c.locale == ${formatLocale} && c.isActive == true
31
+ LIMIT 1
32
+ RETURN c
33
+ `;
34
+ try {
35
+ const content = await useDb(databaseName).query(aqlQry).then((cursor)=>cursor.next()).catch((error)=>logError({
36
+ action,
37
+ category: eventCategory,
38
+ label: ErrorTypes.DATABASE_ERROR
39
+ }, error, context));
40
+ return content ? parseContentFromDb(content) : null;
41
+ } catch (error) {
42
+ throw error;
43
+ }
44
+ };
45
+ export const getContentWithFallback = async (context, key, fallbackContent, locale = 'en')=>{
46
+ const appLocale = Config.get('app.locale') || 'en';
47
+ try {
48
+ let content = await getContent(context, key, locale);
49
+ if (content?.content) {
50
+ return content.content;
51
+ }
52
+ if (isRegionalLocale(locale)) {
53
+ const language = extractLanguage(locale);
54
+ content = await getContent(context, key, language);
55
+ if (content?.content) {
56
+ addContent(context, {
57
+ key,
58
+ content: content.content,
59
+ locale,
60
+ description: `Extracted from ${language}`
61
+ }).catch((saveError)=>{
62
+ console.error('Error saving extracted content:', saveError);
63
+ });
64
+ return content.content;
65
+ }
66
+ }
67
+ if (locale === appLocale) {
68
+ if (fallbackContent) {
69
+ addContent(context, {
70
+ key,
71
+ content: fallbackContent,
72
+ locale,
73
+ description: 'Auto-generated from fallback'
74
+ }).catch((saveError)=>{
75
+ console.error('Error saving fallback content:', saveError);
76
+ });
77
+ }
78
+ return fallbackContent || key;
79
+ }
80
+ try {
81
+ let sourceContent = await getContent(context, key, appLocale);
82
+ let sourceText;
83
+ if (sourceContent?.content) {
84
+ sourceText = sourceContent.content;
85
+ } else {
86
+ if (isRegionalLocale(appLocale)) {
87
+ const appLanguage = extractLanguage(appLocale);
88
+ sourceContent = await getContent(context, key, appLanguage);
89
+ }
90
+ if (sourceContent?.content) {
91
+ sourceText = sourceContent.content;
92
+ } else if (fallbackContent) {
93
+ sourceText = fallbackContent;
94
+ addContent(context, {
95
+ key,
96
+ content: fallbackContent,
97
+ locale: appLocale,
98
+ description: 'Auto-generated from fallback'
99
+ }).catch((saveError)=>{
100
+ console.error('Error saving fallback as default content:', saveError);
101
+ });
102
+ } else {
103
+ return key;
104
+ }
105
+ }
106
+ const translatedText = await translateText(sourceText, extractLanguage(locale), extractLanguage(appLocale));
107
+ addContent(context, {
108
+ key,
109
+ content: translatedText,
110
+ locale,
111
+ description: `Auto-translated from ${appLocale}`
112
+ }).catch((saveError)=>{
113
+ console.error('Error saving translated content:', saveError);
114
+ });
115
+ return translatedText;
116
+ } catch (translationError) {
117
+ console.error('Translation error:', translationError);
118
+ return fallbackContent || key;
119
+ }
120
+ } catch (error) {
121
+ console.error('Error fetching content from database:', error);
122
+ return fallbackContent || key;
123
+ }
124
+ };
125
+ export const addContent = async (context, contentInput)=>{
126
+ const action = 'addContent';
127
+ const { databaseName, session } = context;
128
+ const now = Date.now();
129
+ const parsedContent = parseContentInput(contentInput);
130
+ const { key, locale = 'en', content, description, category, isActive = true } = parsedContent;
131
+ const contentId = createHash(`content-${key}-${locale}`);
132
+ const insert = {
133
+ _id: `content/${contentId}`,
134
+ _key: contentId,
135
+ added: now,
136
+ key: parseString(key, 200),
137
+ locale,
138
+ content: parseString(content, 10000),
139
+ description: description ? parseString(description, 500) : undefined,
140
+ category: category ? parseString(category, 100) : undefined,
141
+ isActive,
142
+ modified: now,
143
+ userId: session?.userId
144
+ };
145
+ const aqlQry = aql`INSERT ${insert} IN content RETURN NEW`;
146
+ try {
147
+ const savedContent = await useDb(databaseName).query(aqlQry).then((cursor)=>cursor.next()).catch((error)=>logError({
148
+ action,
149
+ category: eventCategory,
150
+ label: ErrorTypes.DATABASE_ERROR
151
+ }, error, context));
152
+ return parseContentFromDb(savedContent);
153
+ } catch (error) {
154
+ throw error;
155
+ }
156
+ };
157
+ export const updateContent = async (context, contentInput)=>{
158
+ const action = 'updateContent';
159
+ const { databaseName } = context;
160
+ const now = Date.now();
161
+ const parsedContent = parseContentInput(contentInput);
162
+ const { contentId, content, description, category, isActive } = parsedContent;
163
+ if (!contentId) {
164
+ throw new Error('Content ID is required for update');
165
+ }
166
+ const update = {
167
+ content: parseString(content, 10000),
168
+ modified: now
169
+ };
170
+ if (description !== undefined) {
171
+ update.description = description ? parseString(description, 500) : undefined;
172
+ }
173
+ if (category !== undefined) {
174
+ update.category = category ? parseString(category, 100) : undefined;
175
+ }
176
+ if (isActive !== undefined) {
177
+ update.isActive = isActive;
178
+ }
179
+ const aqlQry = aql`
180
+ FOR c IN content
181
+ FILTER c._key == ${contentId}
182
+ UPDATE c WITH ${update} IN content
183
+ RETURN NEW
184
+ `;
185
+ try {
186
+ const updatedContent = await useDb(databaseName).query(aqlQry).then((cursor)=>cursor.next()).catch((error)=>logError({
187
+ action,
188
+ category: eventCategory,
189
+ label: ErrorTypes.DATABASE_ERROR
190
+ }, error, context));
191
+ if (!updatedContent) {
192
+ throw new Error('Content not found or access denied');
193
+ }
194
+ return parseContentFromDb(updatedContent);
195
+ } catch (error) {
196
+ throw error;
197
+ }
198
+ };
199
+ export const searchContent = async (context, options = {})=>{
200
+ const action = 'searchContent';
201
+ const { databaseName } = context;
202
+ const { category, isActive, key, locale } = parseContentOptions(options);
203
+ const filterConditions = [];
204
+ const bindVars = {};
205
+ if (key) {
206
+ filterConditions.push('c.key == @key');
207
+ bindVars.key = key;
208
+ }
209
+ if (locale) {
210
+ filterConditions.push('c.locale == @locale');
211
+ bindVars.locale = locale;
212
+ }
213
+ if (category) {
214
+ filterConditions.push('c.category == @category');
215
+ bindVars.category = category;
216
+ }
217
+ if (isActive !== undefined) {
218
+ filterConditions.push('c.isActive == @isActive');
219
+ bindVars.isActive = isActive;
220
+ }
221
+ const filterClause = filterConditions.length > 0 ? `FILTER ${filterConditions.join(' && ')}` : '';
222
+ const aqlQuery = `
223
+ FOR c IN content
224
+ ${filterClause}
225
+ SORT c.key, c.locale
226
+ RETURN c
227
+ `;
228
+ try {
229
+ const contentList = await useDb(databaseName).query(aqlQuery, bindVars).then((cursor)=>cursor.all()).catch((error)=>logError({
230
+ action,
231
+ category: eventCategory,
232
+ label: ErrorTypes.DATABASE_ERROR
233
+ }, error, context));
234
+ return contentList.map((content)=>parseContentFromDb(content));
235
+ } catch (error) {
236
+ throw error;
237
+ }
238
+ };
239
+
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvY29udGVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyNS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZVN0cmluZ30gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHR5cGUge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge3BhcnNlQ29udGVudEZyb21EYiwgcGFyc2VDb250ZW50SW5wdXR9IGZyb20gJy4uL2FkYXB0ZXJzL2NvbnRlbnRBZGFwdGVyLmpzJztcbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge3VzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7dHJhbnNsYXRlVGV4dH0gZnJvbSAnLi4vdXRpbHMvZ29vZ2xlVHJhbnNsYXRlLmpzJztcbmltcG9ydCB7ZXh0cmFjdExhbmd1YWdlLCBpc1JlZ2lvbmFsTG9jYWxlfSBmcm9tICcuLi91dGlscy9sb2NhbGVVdGlscy5qcyc7XG5cbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtDb250ZW50SW5wdXRUeXBlLCBDb250ZW50T3B0aW9ucywgQ29udGVudFR5cGUsIExvY2FsZX0gZnJvbSAnLi4vdHlwZXMvY29udGVudC50eXBlcy5qcyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdjb250ZW50JztcblxuZXhwb3J0IGNvbnN0IHBhcnNlQ29udGVudE9wdGlvbnMgPSAob3B0aW9uczogQ29udGVudE9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgY2F0ZWdvcnksXG4gICAgaXNBY3RpdmUgPSB0cnVlLFxuICAgIGtleSxcbiAgICBsb2NhbGVcbiAgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIHtcbiAgICBjYXRlZ29yeTogY2F0ZWdvcnkgPyBwYXJzZVN0cmluZyhjYXRlZ29yeSwgMTAwKSA6IHVuZGVmaW5lZCxcbiAgICBpc0FjdGl2ZSxcbiAgICBrZXk6IGtleSA/IHBhcnNlU3RyaW5nKGtleSwgMjAwKSA6IHVuZGVmaW5lZCxcbiAgICBsb2NhbGVcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb250ZW50ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBrZXk6IHN0cmluZyxcbiAgbG9jYWxlOiBzdHJpbmcgPSAnZW4nXG4pOiBQcm9taXNlPENvbnRlbnRUeXBlIHwgbnVsbD4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRDb250ZW50JztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRLZXk6IHN0cmluZyA9IHBhcnNlU3RyaW5nKGtleSwgMjAwKTtcbiAgY29uc3QgZm9ybWF0TG9jYWxlOiBzdHJpbmcgPSBwYXJzZVN0cmluZyhsb2NhbGUsIDUpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIGMgSU4gY29udGVudFxuICAgIEZJTFRFUiBjLmtleSA9PSAke2Zvcm1hdEtleX0gJiYgYy5sb2NhbGUgPT0gJHtmb3JtYXRMb2NhbGV9ICYmIGMuaXNBY3RpdmUgPT0gdHJ1ZVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gY1xuICBgO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgY29udGVudDogQ29udGVudFR5cGUgfCBudWxsID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKVxuICAgICAgLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcblxuICAgIHJldHVybiBjb250ZW50ID8gcGFyc2VDb250ZW50RnJvbURiKGNvbnRlbnQpIDogbnVsbDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udGVudFdpdGhGYWxsYmFjayA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAga2V5OiBzdHJpbmcsXG4gIGZhbGxiYWNrQ29udGVudDogc3RyaW5nLFxuICBsb2NhbGU6IExvY2FsZSA9ICdlbidcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGFwcExvY2FsZSA9IChDb25maWcuZ2V0KCdhcHAubG9jYWxlJykgfHwgJ2VuJykgYXMgTG9jYWxlO1xuXG4gIHRyeSB7XG4gICAgbGV0IGNvbnRlbnQgPSBhd2FpdCBnZXRDb250ZW50KGNvbnRleHQsIGtleSwgbG9jYWxlKTtcblxuICAgIGlmKGNvbnRlbnQ/LmNvbnRlbnQpIHtcbiAgICAgIHJldHVybiBjb250ZW50LmNvbnRlbnQ7XG4gICAgfVxuXG4gICAgaWYoaXNSZWdpb25hbExvY2FsZShsb2NhbGUpKSB7XG4gICAgICBjb25zdCBsYW5ndWFnZSA9IGV4dHJhY3RMYW5ndWFnZShsb2NhbGUpO1xuICAgICAgY29udGVudCA9IGF3YWl0IGdldENvbnRlbnQoY29udGV4dCwga2V5LCBsYW5ndWFnZSBhcyBMb2NhbGUpO1xuXG4gICAgICBpZihjb250ZW50Py5jb250ZW50KSB7XG4gICAgICAgIGFkZENvbnRlbnQoY29udGV4dCwge1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICBjb250ZW50OiBjb250ZW50LmNvbnRlbnQsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBgRXh0cmFjdGVkIGZyb20gJHtsYW5ndWFnZX1gXG4gICAgICAgIH0pLmNhdGNoKChzYXZlRXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzYXZpbmcgZXh0cmFjdGVkIGNvbnRlbnQ6Jywgc2F2ZUVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRlbnQuY29udGVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihsb2NhbGUgPT09IGFwcExvY2FsZSkge1xuICAgICAgaWYoZmFsbGJhY2tDb250ZW50KSB7XG4gICAgICAgIGFkZENvbnRlbnQoY29udGV4dCwge1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICBjb250ZW50OiBmYWxsYmFja0NvbnRlbnQsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQXV0by1nZW5lcmF0ZWQgZnJvbSBmYWxsYmFjaydcbiAgICAgICAgfSkuY2F0Y2goKHNhdmVFcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNhdmluZyBmYWxsYmFjayBjb250ZW50OicsIHNhdmVFcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsbGJhY2tDb250ZW50IHx8IGtleTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGxldCBzb3VyY2VDb250ZW50ID0gYXdhaXQgZ2V0Q29udGVudChjb250ZXh0LCBrZXksIGFwcExvY2FsZSk7XG4gICAgICBsZXQgc291cmNlVGV4dDogc3RyaW5nO1xuXG4gICAgICBpZihzb3VyY2VDb250ZW50Py5jb250ZW50KSB7XG4gICAgICAgIHNvdXJjZVRleHQgPSBzb3VyY2VDb250ZW50LmNvbnRlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZihpc1JlZ2lvbmFsTG9jYWxlKGFwcExvY2FsZSkpIHtcbiAgICAgICAgICBjb25zdCBhcHBMYW5ndWFnZSA9IGV4dHJhY3RMYW5ndWFnZShhcHBMb2NhbGUpO1xuICAgICAgICAgIHNvdXJjZUNvbnRlbnQgPSBhd2FpdCBnZXRDb250ZW50KGNvbnRleHQsIGtleSwgYXBwTGFuZ3VhZ2UgYXMgTG9jYWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHNvdXJjZUNvbnRlbnQ/LmNvbnRlbnQpIHtcbiAgICAgICAgICBzb3VyY2VUZXh0ID0gc291cmNlQ29udGVudC5jb250ZW50O1xuICAgICAgICB9IGVsc2UgaWYoZmFsbGJhY2tDb250ZW50KSB7XG4gICAgICAgICAgc291cmNlVGV4dCA9IGZhbGxiYWNrQ29udGVudDtcblxuICAgICAgICAgIGFkZENvbnRlbnQoY29udGV4dCwge1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgY29udGVudDogZmFsbGJhY2tDb250ZW50LFxuICAgICAgICAgICAgbG9jYWxlOiBhcHBMb2NhbGUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0F1dG8tZ2VuZXJhdGVkIGZyb20gZmFsbGJhY2snXG4gICAgICAgICAgfSkuY2F0Y2goKHNhdmVFcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc2F2aW5nIGZhbGxiYWNrIGFzIGRlZmF1bHQgY29udGVudDonLCBzYXZlRXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdHJhbnNsYXRlZFRleHQgPSBhd2FpdCB0cmFuc2xhdGVUZXh0KHNvdXJjZVRleHQsIGV4dHJhY3RMYW5ndWFnZShsb2NhbGUpLCBleHRyYWN0TGFuZ3VhZ2UoYXBwTG9jYWxlKSk7XG5cbiAgICAgIGFkZENvbnRlbnQoY29udGV4dCwge1xuICAgICAgICBrZXksXG4gICAgICAgIGNvbnRlbnQ6IHRyYW5zbGF0ZWRUZXh0LFxuICAgICAgICBsb2NhbGUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgQXV0by10cmFuc2xhdGVkIGZyb20gJHthcHBMb2NhbGV9YFxuICAgICAgfSkuY2F0Y2goKHNhdmVFcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzYXZpbmcgdHJhbnNsYXRlZCBjb250ZW50OicsIHNhdmVFcnJvcik7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRyYW5zbGF0ZWRUZXh0O1xuICAgIH0gY2F0Y2godHJhbnNsYXRpb25FcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignVHJhbnNsYXRpb24gZXJyb3I6JywgdHJhbnNsYXRpb25FcnJvcik7XG5cbiAgICAgIHJldHVybiBmYWxsYmFja0NvbnRlbnQgfHwga2V5O1xuICAgIH1cbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGNvbnRlbnQgZnJvbSBkYXRhYmFzZTonLCBlcnJvcik7XG4gICAgcmV0dXJuIGZhbGxiYWNrQ29udGVudCB8fCBrZXk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBhZGRDb250ZW50ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb250ZW50SW5wdXQ6IENvbnRlbnRJbnB1dFR5cGVcbik6IFByb21pc2U8Q29udGVudFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkQ29udGVudCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb259ID0gY29udGV4dDtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgcGFyc2VkQ29udGVudCA9IHBhcnNlQ29udGVudElucHV0KGNvbnRlbnRJbnB1dCk7XG4gIGNvbnN0IHtrZXksIGxvY2FsZSA9ICdlbicsIGNvbnRlbnQsIGRlc2NyaXB0aW9uLCBjYXRlZ29yeSwgaXNBY3RpdmUgPSB0cnVlfSA9IHBhcnNlZENvbnRlbnQ7XG4gIGNvbnN0IGNvbnRlbnRJZCA9IGNyZWF0ZUhhc2goYGNvbnRlbnQtJHtrZXl9LSR7bG9jYWxlfWApO1xuICBjb25zdCBpbnNlcnQ6IENvbnRlbnRUeXBlID0ge1xuICAgIF9pZDogYGNvbnRlbnQvJHtjb250ZW50SWR9YCxcbiAgICBfa2V5OiBjb250ZW50SWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICBrZXk6IHBhcnNlU3RyaW5nKGtleSwgMjAwKSxcbiAgICBsb2NhbGUsXG4gICAgY29udGVudDogcGFyc2VTdHJpbmcoY29udGVudCwgMTAwMDApLFxuICAgIGRlc2NyaXB0aW9uOiAoZGVzY3JpcHRpb24gPyBwYXJzZVN0cmluZyhkZXNjcmlwdGlvbiwgNTAwKSA6IHVuZGVmaW5lZCkgYXMgc3RyaW5nLFxuICAgIGNhdGVnb3J5OiAoY2F0ZWdvcnkgPyBwYXJzZVN0cmluZyhjYXRlZ29yeSwgMTAwKSA6IHVuZGVmaW5lZCkgYXMgc3RyaW5nLFxuICAgIGlzQWN0aXZlLFxuICAgIG1vZGlmaWVkOiBub3csXG4gICAgdXNlcklkOiBzZXNzaW9uPy51c2VySWQgYXMgc3RyaW5nXG4gIH07XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIGNvbnRlbnQgUkVUVVJOIE5FV2A7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzYXZlZENvbnRlbnQ6IENvbnRlbnRUeXBlID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKVxuICAgICAgLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcblxuICAgIHJldHVybiBwYXJzZUNvbnRlbnRGcm9tRGIoc2F2ZWRDb250ZW50KTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQ29udGVudCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29udGVudElucHV0OiBDb250ZW50SW5wdXRUeXBlXG4pOiBQcm9taXNlPENvbnRlbnRUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ3VwZGF0ZUNvbnRlbnQnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IHBhcnNlZENvbnRlbnQgPSBwYXJzZUNvbnRlbnRJbnB1dChjb250ZW50SW5wdXQpO1xuICBjb25zdCB7Y29udGVudElkLCBjb250ZW50LCBkZXNjcmlwdGlvbiwgY2F0ZWdvcnksIGlzQWN0aXZlfSA9IHBhcnNlZENvbnRlbnQ7XG5cbiAgaWYoIWNvbnRlbnRJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ29udGVudCBJRCBpcyByZXF1aXJlZCBmb3IgdXBkYXRlJyk7XG4gIH1cblxuICBjb25zdCB1cGRhdGU6IGFueSA9IHtcbiAgICBjb250ZW50OiBwYXJzZVN0cmluZyhjb250ZW50LCAxMDAwMCksXG4gICAgbW9kaWZpZWQ6IG5vd1xuICB9O1xuXG4gIGlmKGRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICB1cGRhdGUuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbiA/IHBhcnNlU3RyaW5nKGRlc2NyaXB0aW9uLCA1MDApIDogdW5kZWZpbmVkO1xuICB9XG4gIGlmKGNhdGVnb3J5ICE9PSB1bmRlZmluZWQpIHtcbiAgICB1cGRhdGUuY2F0ZWdvcnkgPSBjYXRlZ29yeSA/IHBhcnNlU3RyaW5nKGNhdGVnb3J5LCAxMDApIDogdW5kZWZpbmVkO1xuICB9XG4gIGlmKGlzQWN0aXZlICE9PSB1bmRlZmluZWQpIHtcbiAgICB1cGRhdGUuaXNBY3RpdmUgPSBpc0FjdGl2ZTtcbiAgfVxuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIGMgSU4gY29udGVudFxuICAgIEZJTFRFUiBjLl9rZXkgPT0gJHtjb250ZW50SWR9XG4gICAgVVBEQVRFIGMgV0lUSCAke3VwZGF0ZX0gSU4gY29udGVudFxuICAgIFJFVFVSTiBORVdcbiAgYDtcblxuICB0cnkge1xuICAgIGNvbnN0IHVwZGF0ZWRDb250ZW50OiBDb250ZW50VHlwZSA9IGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSlcbiAgICAgIC5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG5cbiAgICBpZighdXBkYXRlZENvbnRlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29udGVudCBub3QgZm91bmQgb3IgYWNjZXNzIGRlbmllZCcpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZUNvbnRlbnRGcm9tRGIodXBkYXRlZENvbnRlbnQpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzZWFyY2hDb250ZW50ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBvcHRpb25zOiBDb250ZW50T3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPENvbnRlbnRUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnc2VhcmNoQ29udGVudCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qge2NhdGVnb3J5LCBpc0FjdGl2ZSwga2V5LCBsb2NhbGV9ID0gcGFyc2VDb250ZW50T3B0aW9ucyhvcHRpb25zKTtcblxuICBjb25zdCBmaWx0ZXJDb25kaXRpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBiaW5kVmFyczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gIGlmKGtleSkge1xuICAgIGZpbHRlckNvbmRpdGlvbnMucHVzaCgnYy5rZXkgPT0gQGtleScpO1xuICAgIGJpbmRWYXJzLmtleSA9IGtleTtcbiAgfVxuXG4gIGlmKGxvY2FsZSkge1xuICAgIGZpbHRlckNvbmRpdGlvbnMucHVzaCgnYy5sb2NhbGUgPT0gQGxvY2FsZScpO1xuICAgIGJpbmRWYXJzLmxvY2FsZSA9IGxvY2FsZTtcbiAgfVxuXG4gIGlmKGNhdGVnb3J5KSB7XG4gICAgZmlsdGVyQ29uZGl0aW9ucy5wdXNoKCdjLmNhdGVnb3J5ID09IEBjYXRlZ29yeScpO1xuICAgIGJpbmRWYXJzLmNhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gIH1cblxuICBpZihpc0FjdGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZmlsdGVyQ29uZGl0aW9ucy5wdXNoKCdjLmlzQWN0aXZlID09IEBpc0FjdGl2ZScpO1xuICAgIGJpbmRWYXJzLmlzQWN0aXZlID0gaXNBY3RpdmU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXJDbGF1c2UgPSBmaWx0ZXJDb25kaXRpb25zLmxlbmd0aCA+IDAgPyBgRklMVEVSICR7ZmlsdGVyQ29uZGl0aW9ucy5qb2luKCcgJiYgJyl9YCA6ICcnO1xuXG4gIGNvbnN0IGFxbFF1ZXJ5ID0gYFxuICAgIEZPUiBjIElOIGNvbnRlbnRcbiAgICAke2ZpbHRlckNsYXVzZX1cbiAgICBTT1JUIGMua2V5LCBjLmxvY2FsZVxuICAgIFJFVFVSTiBjXG4gIGA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjb250ZW50TGlzdCA9IGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSlcbiAgICAgIC5xdWVyeShhcWxRdWVyeSwgYmluZFZhcnMpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcblxuICAgIHJldHVybiAoY29udGVudExpc3QgYXMgQ29udGVudFR5cGVbXSkubWFwKChjb250ZW50KSA9PiBwYXJzZUNvbnRlbnRGcm9tRGIoY29udGVudCkpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07Il0sIm5hbWVzIjpbImNyZWF0ZUhhc2giLCJwYXJzZVN0cmluZyIsImFxbCIsInBhcnNlQ29udGVudEZyb21EYiIsInBhcnNlQ29udGVudElucHV0IiwiQ29uZmlnIiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwidXNlRGIiLCJ0cmFuc2xhdGVUZXh0IiwiZXh0cmFjdExhbmd1YWdlIiwiaXNSZWdpb25hbExvY2FsZSIsImV2ZW50Q2F0ZWdvcnkiLCJwYXJzZUNvbnRlbnRPcHRpb25zIiwib3B0aW9ucyIsImNhdGVnb3J5IiwiaXNBY3RpdmUiLCJrZXkiLCJsb2NhbGUiLCJ1bmRlZmluZWQiLCJnZXRDb250ZW50IiwiY29udGV4dCIsImFjdGlvbiIsImRhdGFiYXNlTmFtZSIsImZvcm1hdEtleSIsImZvcm1hdExvY2FsZSIsImFxbFFyeSIsImNvbnRlbnQiLCJxdWVyeSIsInRoZW4iLCJjdXJzb3IiLCJuZXh0IiwiY2F0Y2giLCJlcnJvciIsImxhYmVsIiwiREFUQUJBU0VfRVJST1IiLCJnZXRDb250ZW50V2l0aEZhbGxiYWNrIiwiZmFsbGJhY2tDb250ZW50IiwiYXBwTG9jYWxlIiwiZ2V0IiwibGFuZ3VhZ2UiLCJhZGRDb250ZW50IiwiZGVzY3JpcHRpb24iLCJzYXZlRXJyb3IiLCJjb25zb2xlIiwic291cmNlQ29udGVudCIsInNvdXJjZVRleHQiLCJhcHBMYW5ndWFnZSIsInRyYW5zbGF0ZWRUZXh0IiwidHJhbnNsYXRpb25FcnJvciIsImNvbnRlbnRJbnB1dCIsInNlc3Npb24iLCJub3ciLCJEYXRlIiwicGFyc2VkQ29udGVudCIsImNvbnRlbnRJZCIsImluc2VydCIsIl9pZCIsIl9rZXkiLCJhZGRlZCIsIm1vZGlmaWVkIiwidXNlcklkIiwic2F2ZWRDb250ZW50IiwidXBkYXRlQ29udGVudCIsIkVycm9yIiwidXBkYXRlIiwidXBkYXRlZENvbnRlbnQiLCJzZWFyY2hDb250ZW50IiwiZmlsdGVyQ29uZGl0aW9ucyIsImJpbmRWYXJzIiwicHVzaCIsImZpbHRlckNsYXVzZSIsImxlbmd0aCIsImpvaW4iLCJhcWxRdWVyeSIsImNvbnRlbnRMaXN0IiwiYWxsIiwibWFwIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxVQUFVLEVBQUVDLFdBQVcsUUFBTywrQkFBK0I7QUFDckUsU0FBUUMsR0FBRyxRQUFPLFdBQVc7QUFHN0IsU0FBUUMsa0JBQWtCLEVBQUVDLGlCQUFpQixRQUFPLGdDQUFnQztBQUNwRixTQUFRQyxNQUFNLFFBQU8sZUFBZTtBQUNwQyxTQUFRQyxVQUFVLFFBQU8sMEJBQTBCO0FBQ25ELFNBQVFDLFFBQVEsUUFBTyw2QkFBNkI7QUFDcEQsU0FBUUMsS0FBSyxRQUFPLDRCQUE0QjtBQUNoRCxTQUFRQyxhQUFhLFFBQU8sOEJBQThCO0FBQzFELFNBQVFDLGVBQWUsRUFBRUMsZ0JBQWdCLFFBQU8sMEJBQTBCO0FBSzFF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