@nlabs/reaktor 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (357) hide show
  1. package/README.md +9 -0
  2. package/coverage/index.html +92 -47
  3. package/dist/actions/apps.js +242 -0
  4. package/dist/actions/connections.js +90 -0
  5. package/dist/actions/conversations.js +350 -0
  6. package/dist/actions/dynamodb.js +150 -0
  7. package/dist/actions/email.js +152 -0
  8. package/dist/actions/files.js +283 -0
  9. package/dist/actions/groups.js +292 -0
  10. package/dist/actions/images.js +735 -0
  11. package/dist/actions/index.js +66 -0
  12. package/dist/actions/ios.js +164 -0
  13. package/dist/actions/locations.js +122 -0
  14. package/dist/actions/messages.js +208 -0
  15. package/dist/actions/notifications.js +59 -0
  16. package/dist/actions/payments.js +497 -0
  17. package/dist/actions/personas.js +110 -0
  18. package/dist/actions/posts.js +595 -0
  19. package/dist/actions/reactions.js +322 -0
  20. package/dist/actions/s3.js +133 -0
  21. package/dist/actions/search.js +90 -0
  22. package/dist/actions/sms.js +108 -0
  23. package/dist/actions/statistics.js +62 -0
  24. package/dist/actions/subscription.js +220 -0
  25. package/dist/actions/tags.js +292 -0
  26. package/dist/actions/users.js +784 -0
  27. package/dist/actions/websockets.js +174 -0
  28. package/dist/adapters/arangoAdapter.js +46 -0
  29. package/dist/adapters/fileAdapter.js +76 -0
  30. package/dist/adapters/imageAdapter.js +40 -0
  31. package/dist/adapters/messageAdapter.js +49 -0
  32. package/dist/adapters/postAdapter.js +70 -0
  33. package/dist/adapters/reaktorAdapter.js +44 -0
  34. package/dist/adapters/tagAdapter.js +50 -0
  35. package/dist/adapters/userAdapter.js +115 -0
  36. package/dist/config.js +125 -0
  37. package/dist/index.js +66 -0
  38. package/dist/lambdas/actions/websockets.js +132 -0
  39. package/dist/lambdas/authorizer.js +67 -0
  40. package/dist/lambdas/connection.js +91 -0
  41. package/dist/lambdas/utils/message.js +42 -0
  42. package/dist/lambdas/utils/websocket.js +105 -0
  43. package/dist/mocks/conversation.js +35 -0
  44. package/dist/mocks/file.js +38 -0
  45. package/dist/mocks/group.js +47 -0
  46. package/dist/mocks/image.js +44 -0
  47. package/dist/mocks/nlabs.png +0 -0
  48. package/dist/mocks/post.js +55 -0
  49. package/dist/mocks/tag.js +37 -0
  50. package/dist/mocks/user.js +88 -0
  51. package/dist/mutations/index.js +26 -0
  52. package/dist/mutations/locations.js +44 -0
  53. package/dist/mutations/messages.js +86 -0
  54. package/dist/mutations/personas.js +100 -0
  55. package/dist/mutations/posts.js +53 -0
  56. package/dist/mutations/reactions.js +51 -0
  57. package/dist/mutations/statistics.js +39 -0
  58. package/dist/mutations/subscriptions.js +56 -0
  59. package/dist/mutations/tags.js +120 -0
  60. package/dist/mutations/users.js +116 -0
  61. package/dist/objectTypes/app.js +173 -0
  62. package/dist/objectTypes/bankAccount.js +76 -0
  63. package/dist/objectTypes/connection.js +48 -0
  64. package/dist/objectTypes/conversation.js +77 -0
  65. package/dist/objectTypes/creditCard.js +86 -0
  66. package/dist/objectTypes/document.js +46 -0
  67. package/dist/objectTypes/error.js +46 -0
  68. package/dist/objectTypes/external.js +74 -0
  69. package/dist/objectTypes/file.js +100 -0
  70. package/dist/objectTypes/filter.js +43 -0
  71. package/dist/objectTypes/group.js +123 -0
  72. package/dist/objectTypes/iapSubscription.js +40 -0
  73. package/dist/objectTypes/image.js +129 -0
  74. package/dist/objectTypes/index.js +68 -0
  75. package/dist/objectTypes/location.js +109 -0
  76. package/dist/objectTypes/message.js +96 -0
  77. package/dist/objectTypes/passcode.js +42 -0
  78. package/dist/objectTypes/persona.js +87 -0
  79. package/dist/objectTypes/plan.js +95 -0
  80. package/dist/objectTypes/post.js +125 -0
  81. package/dist/objectTypes/reaction.js +61 -0
  82. package/dist/objectTypes/relation.js +49 -0
  83. package/dist/objectTypes/search.js +72 -0
  84. package/dist/objectTypes/statistics.js +39 -0
  85. package/dist/objectTypes/subscription.js +117 -0
  86. package/dist/objectTypes/tag.js +65 -0
  87. package/dist/objectTypes/user.js +144 -0
  88. package/dist/queries/index.js +33 -0
  89. package/dist/queries/locations.js +45 -0
  90. package/dist/queries/messages.js +52 -0
  91. package/dist/queries/posts.js +154 -0
  92. package/dist/queries/reactions.js +56 -0
  93. package/dist/queries/statistics.js +39 -0
  94. package/dist/queries/subscriptions.js +44 -0
  95. package/dist/queries/tags.js +75 -0
  96. package/dist/queries/users.js +64 -0
  97. package/dist/templates/email/layout.js +302 -0
  98. package/dist/templates/email/passwordForgot.js +38 -0
  99. package/dist/templates/email/passwordRecovery.js +35 -0
  100. package/dist/templates/email/verifyEmail.js +38 -0
  101. package/dist/templates/email/welcome.js +38 -0
  102. package/dist/templates/sms/passwordForgot.js +24 -0
  103. package/dist/templates/sms/passwordRecovery.js +24 -0
  104. package/dist/templates/sms/verifyEmail.js +24 -0
  105. package/dist/templates/sms/verifyPhone.js +24 -0
  106. package/dist/templates/sms/welcome.js +24 -0
  107. package/dist/types/apps.js +32 -0
  108. package/{lib → dist}/types/arangodb.js +1 -1
  109. package/{lib → dist}/types/auth.js +1 -1
  110. package/{lib → dist}/types/connections.js +1 -1
  111. package/dist/types/conversations.js +16 -0
  112. package/{lib → dist}/types/email.js +1 -1
  113. package/dist/types/files.js +16 -0
  114. package/dist/types/google.js +16 -0
  115. package/{lib → dist}/types/groups.js +1 -1
  116. package/dist/types/images.js +16 -0
  117. package/dist/types/index.js +60 -0
  118. package/{lib → dist}/types/locations.js +1 -1
  119. package/{lib → dist}/types/messages.js +1 -1
  120. package/{lib → dist}/types/notifications.js +1 -1
  121. package/dist/types/payments.js +16 -0
  122. package/dist/types/personas.js +16 -0
  123. package/dist/types/posts.js +16 -0
  124. package/{lib → dist}/types/tags.js +1 -1
  125. package/dist/types/users.js +16 -0
  126. package/dist/types/websockets.js +16 -0
  127. package/dist/utils/adapterUtils.js +45 -0
  128. package/dist/utils/analyticsUtils.js +72 -0
  129. package/dist/utils/arangodbUtils.js +165 -0
  130. package/dist/utils/auth.js +57 -0
  131. package/dist/utils/index.js +30 -0
  132. package/dist/utils/session.js +60 -0
  133. package/lex.config.cjs +13 -0
  134. package/lib/actions/apps.d.ts +3 -3
  135. package/lib/actions/apps.js +38 -48
  136. package/lib/actions/connections.d.ts +4 -0
  137. package/lib/actions/connections.js +90 -0
  138. package/lib/actions/conversations.d.ts +1 -1
  139. package/lib/actions/conversations.js +32 -21
  140. package/lib/actions/email.d.ts +1 -1
  141. package/lib/actions/email.js +11 -11
  142. package/lib/actions/files.d.ts +2 -2
  143. package/lib/actions/files.js +4 -8
  144. package/lib/actions/groups.d.ts +2 -2
  145. package/lib/actions/groups.js +12 -12
  146. package/lib/actions/images.d.ts +5 -5
  147. package/lib/actions/images.js +120 -66
  148. package/lib/actions/index.d.ts +2 -0
  149. package/lib/actions/index.js +5 -1
  150. package/lib/actions/ios.js +2 -2
  151. package/lib/actions/locations.d.ts +4 -3
  152. package/lib/actions/locations.js +16 -4
  153. package/lib/actions/messages.d.ts +4 -3
  154. package/lib/actions/messages.js +26 -23
  155. package/lib/actions/notifications.d.ts +1 -1
  156. package/lib/actions/notifications.js +1 -1
  157. package/lib/actions/payments.js +63 -60
  158. package/lib/actions/personas.d.ts +3 -0
  159. package/lib/actions/personas.js +110 -0
  160. package/lib/actions/posts.d.ts +5 -2
  161. package/lib/actions/posts.js +55 -41
  162. package/lib/actions/reactions.js +2 -2
  163. package/lib/actions/search.d.ts +2 -2
  164. package/lib/actions/search.js +5 -5
  165. package/lib/actions/sms.d.ts +9 -3
  166. package/lib/actions/sms.js +9 -7
  167. package/lib/actions/statistics.d.ts +1 -1
  168. package/lib/actions/statistics.js +2 -2
  169. package/lib/actions/subscription.d.ts +2 -2
  170. package/lib/actions/subscription.js +12 -22
  171. package/lib/actions/tags.d.ts +8 -3
  172. package/lib/actions/tags.js +46 -21
  173. package/lib/actions/users.d.ts +38 -13
  174. package/lib/actions/users.js +291 -61
  175. package/lib/actions/websockets.d.ts +6 -5
  176. package/lib/actions/websockets.js +37 -35
  177. package/lib/adapters/arangoAdapter.d.ts +1 -1
  178. package/lib/adapters/arangoAdapter.js +1 -1
  179. package/lib/adapters/imageAdapter.d.ts +2 -0
  180. package/lib/adapters/imageAdapter.js +40 -0
  181. package/lib/adapters/messageAdapter.d.ts +2 -0
  182. package/lib/adapters/messageAdapter.js +49 -0
  183. package/lib/adapters/postAdapter.js +4 -4
  184. package/lib/adapters/tagAdapter.js +2 -2
  185. package/lib/adapters/userAdapter.js +10 -5
  186. package/lib/config.js +2 -2
  187. package/lib/index.d.ts +7 -0
  188. package/lib/index.js +44 -8
  189. package/lib/lambdas/actions/websockets.d.ts +7 -6
  190. package/lib/lambdas/actions/websockets.js +9 -5
  191. package/lib/lambdas/authorizer.js +4 -4
  192. package/lib/lambdas/connection.js +16 -17
  193. package/lib/lambdas/utils/message.js +1 -1
  194. package/lib/lambdas/utils/websocket.js +1 -1
  195. package/lib/mocks/image.js +3 -2
  196. package/lib/mocks/user.js +3 -3
  197. package/lib/mutations/index.d.ts +3 -0
  198. package/lib/mutations/index.js +26 -0
  199. package/lib/mutations/locations.d.ts +2 -0
  200. package/lib/mutations/locations.js +44 -0
  201. package/lib/mutations/messages.d.ts +2 -0
  202. package/lib/mutations/messages.js +86 -0
  203. package/lib/mutations/personas.d.ts +2 -0
  204. package/lib/mutations/personas.js +100 -0
  205. package/lib/mutations/posts.d.ts +2 -0
  206. package/lib/mutations/posts.js +53 -0
  207. package/lib/mutations/reactions.d.ts +2 -0
  208. package/lib/mutations/reactions.js +51 -0
  209. package/lib/mutations/statistics.d.ts +2 -0
  210. package/lib/mutations/statistics.js +39 -0
  211. package/lib/mutations/subscriptions.d.ts +2 -0
  212. package/lib/mutations/subscriptions.js +56 -0
  213. package/lib/mutations/tags.d.ts +2 -0
  214. package/lib/mutations/tags.js +120 -0
  215. package/lib/mutations/users.d.ts +1 -0
  216. package/lib/mutations/users.js +116 -0
  217. package/lib/objectTypes/app.d.ts +3 -0
  218. package/lib/objectTypes/app.js +173 -0
  219. package/lib/objectTypes/bankAccount.d.ts +1 -0
  220. package/lib/objectTypes/bankAccount.js +76 -0
  221. package/lib/objectTypes/connection.d.ts +1 -0
  222. package/lib/objectTypes/connection.js +48 -0
  223. package/lib/objectTypes/conversation.d.ts +2 -0
  224. package/lib/objectTypes/conversation.js +77 -0
  225. package/lib/objectTypes/creditCard.d.ts +1 -0
  226. package/lib/objectTypes/creditCard.js +86 -0
  227. package/lib/objectTypes/document.d.ts +1 -0
  228. package/lib/objectTypes/document.js +46 -0
  229. package/lib/objectTypes/error.d.ts +1 -0
  230. package/lib/objectTypes/error.js +46 -0
  231. package/lib/objectTypes/external.d.ts +1 -0
  232. package/lib/objectTypes/external.js +74 -0
  233. package/lib/objectTypes/file.d.ts +2 -0
  234. package/lib/objectTypes/file.js +100 -0
  235. package/lib/objectTypes/filter.d.ts +1 -0
  236. package/lib/objectTypes/filter.js +43 -0
  237. package/lib/objectTypes/group.d.ts +3 -0
  238. package/lib/objectTypes/group.js +123 -0
  239. package/lib/objectTypes/iapSubscription.d.ts +1 -0
  240. package/lib/objectTypes/iapSubscription.js +40 -0
  241. package/lib/objectTypes/image.d.ts +2 -0
  242. package/lib/objectTypes/image.js +129 -0
  243. package/lib/objectTypes/index.d.ts +24 -0
  244. package/lib/objectTypes/index.js +68 -0
  245. package/lib/objectTypes/location.d.ts +2 -0
  246. package/lib/objectTypes/location.js +109 -0
  247. package/lib/objectTypes/message.d.ts +2 -0
  248. package/lib/objectTypes/message.js +96 -0
  249. package/lib/objectTypes/passcode.d.ts +1 -0
  250. package/lib/objectTypes/passcode.js +42 -0
  251. package/lib/objectTypes/persona.d.ts +3 -0
  252. package/lib/objectTypes/persona.js +87 -0
  253. package/lib/objectTypes/plan.d.ts +2 -0
  254. package/lib/objectTypes/plan.js +95 -0
  255. package/lib/objectTypes/post.d.ts +2 -0
  256. package/lib/objectTypes/post.js +125 -0
  257. package/lib/objectTypes/reaction.d.ts +2 -0
  258. package/lib/objectTypes/reaction.js +61 -0
  259. package/lib/objectTypes/relation.d.ts +1 -0
  260. package/lib/objectTypes/relation.js +49 -0
  261. package/lib/objectTypes/search.d.ts +1 -0
  262. package/lib/objectTypes/search.js +72 -0
  263. package/lib/objectTypes/statistics.d.ts +1 -0
  264. package/lib/objectTypes/statistics.js +39 -0
  265. package/lib/objectTypes/subscription.d.ts +2 -0
  266. package/lib/objectTypes/subscription.js +117 -0
  267. package/lib/objectTypes/tag.d.ts +2 -0
  268. package/lib/objectTypes/tag.js +65 -0
  269. package/lib/objectTypes/user.d.ts +4 -0
  270. package/lib/objectTypes/user.js +144 -0
  271. package/lib/queries/index.d.ts +3 -0
  272. package/lib/queries/index.js +33 -0
  273. package/lib/queries/locations.d.ts +2 -0
  274. package/lib/queries/locations.js +45 -0
  275. package/lib/queries/messages.d.ts +2 -0
  276. package/lib/queries/messages.js +52 -0
  277. package/lib/queries/posts.d.ts +2 -0
  278. package/lib/queries/posts.js +154 -0
  279. package/lib/queries/reactions.d.ts +2 -0
  280. package/lib/queries/reactions.js +56 -0
  281. package/lib/queries/statistics.d.ts +2 -0
  282. package/lib/queries/statistics.js +39 -0
  283. package/lib/queries/subscriptions.d.ts +2 -0
  284. package/lib/queries/subscriptions.js +44 -0
  285. package/lib/queries/tags.d.ts +2 -0
  286. package/lib/queries/tags.js +75 -0
  287. package/lib/queries/users.d.ts +1 -0
  288. package/lib/queries/users.js +64 -0
  289. package/lib/types/{apps.d.ts → apps.types.d.ts} +2 -2
  290. package/lib/types/apps.types.js +32 -0
  291. package/lib/types/{arangodb.d.ts → arangodb.types.d.ts} +4 -0
  292. package/lib/types/arangodb.types.js +16 -0
  293. package/lib/types/auth.types.d.ts +9 -0
  294. package/lib/types/auth.types.js +16 -0
  295. package/lib/types/{connections.d.ts → connections.types.d.ts} +1 -3
  296. package/lib/types/connections.types.js +16 -0
  297. package/lib/types/{conversations.d.ts → conversations.types.d.ts} +2 -4
  298. package/lib/types/conversations.types.js +16 -0
  299. package/lib/types/{email.d.ts → email.types.d.ts} +3 -3
  300. package/lib/types/email.types.js +16 -0
  301. package/lib/types/error.types.js +44 -0
  302. package/lib/types/{files.d.ts → files.types.d.ts} +1 -4
  303. package/lib/types/files.types.js +16 -0
  304. package/lib/types/google.types.js +16 -0
  305. package/lib/types/{groups.d.ts → groups.types.d.ts} +1 -4
  306. package/lib/types/groups.types.js +16 -0
  307. package/lib/types/{images.d.ts → images.types.d.ts} +9 -8
  308. package/lib/types/images.types.js +16 -0
  309. package/lib/types/index.d.ts +20 -18
  310. package/lib/types/index.js +41 -37
  311. package/lib/types/{locations.d.ts → locations.types.d.ts} +1 -3
  312. package/lib/types/locations.types.js +16 -0
  313. package/lib/types/{messages.d.ts → messages.types.d.ts} +5 -5
  314. package/lib/types/messages.types.js +16 -0
  315. package/lib/types/{notifications.d.ts → notifications.types.d.ts} +4 -2
  316. package/lib/types/notifications.types.js +16 -0
  317. package/lib/types/{payments.d.ts → payments.types.d.ts} +1 -4
  318. package/lib/types/payments.types.js +16 -0
  319. package/lib/types/personas.types.d.ts +32 -0
  320. package/lib/types/personas.types.js +16 -0
  321. package/lib/types/{posts.d.ts → posts.types.d.ts} +4 -7
  322. package/lib/types/posts.types.js +16 -0
  323. package/lib/types/statistics.types.js +16 -0
  324. package/lib/types/{tags.d.ts → tags.types.d.ts} +6 -1
  325. package/lib/types/tags.types.js +16 -0
  326. package/lib/types/{users.d.ts → users.types.d.ts} +12 -9
  327. package/lib/types/users.types.js +16 -0
  328. package/lib/types/{websocket.d.ts → websockets.types.d.ts} +6 -1
  329. package/lib/types/websockets.types.js +16 -0
  330. package/lib/utils/analyticsUtils.d.ts +3 -3
  331. package/lib/utils/analyticsUtils.js +3 -3
  332. package/lib/utils/arangodbUtils.d.ts +2 -1
  333. package/lib/utils/arangodbUtils.js +22 -1
  334. package/lib/utils/auth.d.ts +2 -1
  335. package/lib/utils/auth.js +8 -1
  336. package/lib/utils/index.js +1 -1
  337. package/lib/utils/session.d.ts +3 -1
  338. package/lib/utils/session.js +10 -7
  339. package/lib/utils/stripeUtils.d.ts +3 -0
  340. package/lib/utils/stripeUtils.js +43 -0
  341. package/package.json +35 -34
  342. package/.eslintrc +0 -10
  343. package/lib/types/apps.js +0 -32
  344. package/lib/types/auth.d.ts +0 -7
  345. package/lib/types/conversations.js +0 -16
  346. package/lib/types/files.js +0 -16
  347. package/lib/types/google.js +0 -16
  348. package/lib/types/images.js +0 -16
  349. package/lib/types/payments.js +0 -16
  350. package/lib/types/posts.js +0 -16
  351. package/lib/types/users.js +0 -16
  352. package/lib/types/websocket.js +0 -16
  353. /package/{lib → dist}/types/error.js +0 -0
  354. /package/{lib → dist}/types/statistics.js +0 -0
  355. /package/lib/types/{error.d.ts → error.types.d.ts} +0 -0
  356. /package/lib/types/{google.d.ts → google.types.d.ts} +0 -0
  357. /package/lib/types/{statistics.d.ts → statistics.types.d.ts} +0 -0
@@ -1,8 +1,6 @@
1
- var __create = Object.create;
2
1
  var __defProp = Object.defineProperty;
3
2
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
5
  var __export = (target, all) => {
8
6
  for (var name in all)
@@ -16,14 +14,6 @@ var __copyProps = (to, from, except, desc) => {
16
14
  }
17
15
  return to;
18
16
  };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
- // If the importer is in node compatibility mode or this is not an ESM
21
- // file that has been converted to a CommonJS file using a Babel-
22
- // compatible transform (i.e. "__esModule" has not been set), then set
23
- // "default" to the CommonJS "module.exports" for node compatibility.
24
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
- mod
26
- ));
27
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
18
  var payments_exports = {};
29
19
  __export(payments_exports, {
@@ -40,17 +30,15 @@ __export(payments_exports, {
40
30
  module.exports = __toCommonJS(payments_exports);
41
31
  var import_utils = require("@nlabs/utils");
42
32
  var import_arangojs = require("arangojs");
43
- var import_stripe = __toESM(require("stripe"));
44
- var import_config = require("../config");
45
- var import_analyticsUtils = require("../utils/analyticsUtils");
46
33
  var import_users = require("./users");
47
- var import_error = require("../types/error");
34
+ var import_error = require("../types/error.types");
35
+ var import_analyticsUtils = require("../utils/analyticsUtils");
36
+ var import_stripeUtils = require("../utils/stripeUtils");
48
37
  const eventCategory = "payments";
49
- const apiVersion = "2020-03-02";
50
38
  const addCustomerAccount = (context) => {
51
39
  const action = "addCustomerAccount";
52
40
  const { database, session: { userId: sessionId, username } } = context;
53
- const stripeClient = new import_stripe.default(import_config.Config.get("stripe.token"), { apiVersion, typescript: true });
41
+ const stripeClient = (0, import_stripeUtils.getStripeClient)();
54
42
  return stripeClient.customers.create({
55
43
  metadata: {
56
44
  userId: sessionId,
@@ -92,24 +80,31 @@ const addBankAccount = (context, bankAccount) => {
92
80
  }
93
81
  return (0, import_users.getUser)(context, { userId: sessionId }).then((user) => {
94
82
  const { stripeAccountId } = user;
95
- const stripeClient = new import_stripe.default(import_config.Config.get("stripe.token"), { apiVersion, typescript: true });
96
- const source = {
97
- account_holder_name: formatFullName,
98
- account_holder_type: "individual",
99
- account_number: formatAccount,
100
- country: "US",
101
- currency: "USD",
102
- object: "bank_account",
103
- routing_number: formatRouting
104
- };
105
- return stripeClient.customers.createSource(stripeAccountId, { source }).then((account) => {
106
- const { id: bankId, last4: bankAccount2, routing_number: bankRouting } = account;
83
+ const stripeClient = (0, import_stripeUtils.getStripeClient)();
84
+ return stripeClient.tokens.create({
85
+ bank_account: {
86
+ account_holder_name: formatFullName,
87
+ account_holder_type: "individual",
88
+ account_number: formatAccount,
89
+ country: "US",
90
+ currency: "USD",
91
+ routing_number: formatRouting
92
+ }
93
+ }).then((token) => stripeClient.customers.createSource(
94
+ stripeAccountId,
95
+ { source: token.id }
96
+ )).then((account) => {
97
+ const cardSource = account;
98
+ const brand = cardSource.brand || "";
99
+ const cvcCheck = cardSource.cvc_check || "";
100
+ const last4 = cardSource.last4 || "";
101
+ const now = Date.now();
107
102
  const update = {
108
- bankAccount: bankAccount2,
103
+ bankAccount,
109
104
  bankFullName: formatFullName,
110
- bankId,
111
- bankRouting,
112
- modified: Date.now()
105
+ bankId: account.id,
106
+ bankRouting: formatRouting,
107
+ modified: now
113
108
  };
114
109
  const aqlQry = import_arangojs.aql`UPDATE ${sessionId} WITH ${update} IN users LIMIT 1 RETURN NEW`;
115
110
  return database.query(aqlQry).then((cursor) => cursor.next()).then((updatedUser) => updatedUser);
@@ -190,23 +185,29 @@ const addCreditCard = (context, card) => {
190
185
  if (formatZip) {
191
186
  paymentCard.zip = formatZip;
192
187
  }
193
- const stripeClient = new import_stripe.default(import_config.Config.get("stripe.token"), { apiVersion, typescript: true });
194
- const source = {
195
- address_city: formatCity,
196
- address_country: formatCountry,
197
- address_line1: formatStreet1,
198
- address_line2: formatStreet2,
199
- address_state: formatState,
200
- address_zip: formatZip,
201
- cvc: formatCvc,
202
- exp_month: formatExpMonth,
203
- exp_year: formatExpYear,
204
- name: fullName,
205
- number: formatNumber,
206
- object: "card"
207
- };
208
- return stripeClient.customers.createSource(stripeAccountId, { source }).then((newSource) => {
209
- const { brand, cvc_check: cvcCheck, last4 } = newSource;
188
+ const stripeClient = (0, import_stripeUtils.getStripeClient)();
189
+ return stripeClient.tokens.create({
190
+ card: {
191
+ address_city: formatCity,
192
+ address_country: formatCountry,
193
+ address_line1: formatStreet1,
194
+ address_line2: formatStreet2,
195
+ address_state: formatState,
196
+ address_zip: formatZip,
197
+ cvc: formatCvc.toString(),
198
+ exp_month: formatExpMonth.toString(),
199
+ exp_year: formatExpYear.toString(),
200
+ name: fullName,
201
+ number: formatNumber.toString()
202
+ }
203
+ }).then((token) => stripeClient.customers.createSource(
204
+ stripeAccountId,
205
+ { source: token.id }
206
+ )).then((newSource) => {
207
+ const cardSource = newSource;
208
+ const brand = cardSource.brand || "";
209
+ const cvcCheck = cardSource.cvc_check || "";
210
+ const last4 = cardSource.last4 || "";
210
211
  const now = Date.now();
211
212
  const insert = {
212
213
  ...paymentCard,
@@ -316,15 +317,15 @@ const updateCreditCard = (context, card) => {
316
317
  }
317
318
  const { stripeCustomerId } = user;
318
319
  const { stripeId } = card;
319
- const stripeClient = new import_stripe.default(import_config.Config.get("stripe.token"), { apiVersion, typescript: true });
320
+ const stripeClient = (0, import_stripeUtils.getStripeClient)();
320
321
  const update2 = {
321
322
  address_city: formatCity,
322
323
  address_country: formatCountry,
323
324
  address_line1: formatStreet1,
324
325
  address_state: formatState,
325
326
  address_zip: formatZip,
326
- exp_month: formatExpMonth,
327
- exp_year: formatExpYear,
327
+ exp_month: formatExpMonth.toString(),
328
+ exp_year: formatExpYear.toString(),
328
329
  name: formatFullName
329
330
  };
330
331
  return stripeClient.customers.updateSource(stripeCustomerId, stripeId, update2).then(() => card).catch((error) => {
@@ -370,21 +371,23 @@ const deleteCreditCard = (context, cardId) => {
370
371
  const { card, user } = result;
371
372
  const { _key: cardKey } = card;
372
373
  const edgeCollection = database.collection("hasPayment");
373
- return edgeCollection.outEdges(cardKey, {}).then((edges) => {
374
+ return edgeCollection.outEdges(cardKey, {}).then(async (response) => {
375
+ const edges = Array.isArray(response) ? response : [];
374
376
  if (edges.length) {
375
- return Promise.all(
377
+ await Promise.all(
376
378
  edges.map((edge) => {
377
379
  const { _key: edgeKey } = edge;
378
380
  const removeAqlQry = import_arangojs.aql`REMOVE {_key:${edgeKey}} IN hasPayment`;
379
381
  return database.query(removeAqlQry);
380
382
  })
381
383
  ).then(() => {
382
- const stripeClient = new import_stripe.default(import_config.Config.get("stripe.token"), { apiVersion, typescript: true });
384
+ const stripeClient = (0, import_stripeUtils.getStripeClient)();
383
385
  return stripeClient.customers.deleteSource(user.stripeCustomerId, card.stripeId).then(() => true).catch((error) => {
384
386
  console.log("payments::deleteCard::error", error);
385
387
  throw new import_analyticsUtils.UserError("payment_error");
386
388
  });
387
389
  });
390
+ return true;
388
391
  }
389
392
  return false;
390
393
  });
@@ -402,8 +405,8 @@ const deleteBankAccount = (context, bankId) => {
402
405
  const aqlQry = import_arangojs.aql`UPDATE ${sessionId} WITH ${update} IN users LIMIT 1 RETURN NEW`;
403
406
  return database.query(aqlQry).then((cursor) => cursor.next()).then((user) => {
404
407
  const { stripeAccountId } = user;
405
- const stripeClient = new import_stripe.default(import_config.Config.get("stripe.token"), { apiVersion, typescript: true });
406
- return stripeClient.customers.deleteSource(stripeAccountId, bankId).then((response = { deleted: false }) => response.deleted).catch(() => Promise.resolve(false));
408
+ const stripeClient = (0, import_stripeUtils.getStripeClient)();
409
+ return stripeClient.customers.deleteSource(stripeAccountId, bankId).then(() => true).catch(() => Promise.resolve(false));
407
410
  });
408
411
  };
409
412
  const createPaymentTransfer = (context, transfer) => {
@@ -413,7 +416,7 @@ const createPaymentTransfer = (context, transfer) => {
413
416
  const formatCurrency = (0, import_utils.parseChar)(currency, 3, "USD").toUpperCase();
414
417
  return (0, import_users.getUser)(context, { userId: sessionId }).then((user) => {
415
418
  const { stripeAccountId } = user;
416
- const stripeClient = new import_stripe.default(import_config.Config.get("stripe.token"), { apiVersion, typescript: true });
419
+ const stripeClient = (0, import_stripeUtils.getStripeClient)();
417
420
  return stripeClient.transfers.create({
418
421
  amount: formatAmount,
419
422
  currency: formatCurrency,
@@ -437,7 +440,7 @@ const createPaymentHold = (context, payment) => {
437
440
  const { database, session: { userId: sessionId } } = context;
438
441
  const { amount, capture, cardId, currency, description } = payment;
439
442
  const formatCurrency = (0, import_utils.parseChar)(currency, 3, "USD").toUpperCase();
440
- const stripeClient = new import_stripe.default(import_config.Config.get("stripe.token"), { apiVersion, typescript: true });
443
+ const stripeClient = (0, import_stripeUtils.getStripeClient)();
441
444
  return stripeClient.charges.create({
442
445
  amount,
443
446
  capture,
@@ -479,4 +482,4 @@ const createPaymentHold = (context, payment) => {
479
482
  getCreditCards,
480
483
  updateCreditCard
481
484
  });
482
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvcGF5bWVudHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlQ2hhciwgcGFyc2VJZCwgcGFyc2VOdW0sIHBhcnNlU3RyaW5nLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb24nO1xuaW1wb3J0IHtBcnJheUN1cnNvcn0gZnJvbSAnYXJhbmdvanMvY3Vyc29yJztcbmltcG9ydCBTdHJpcGUgZnJvbSAnc3RyaXBlJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQge0FwaUNvbnRleHQsIFBheW1lbnRCYW5rQWNjb3VudCwgUGF5bWVudENhcmRUeXBlLCBQYXltZW50Q2hhcmdlLCBQYXltZW50VHJhbnNmZXIsIFVzZXJUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2xvZ0Vycm9yLCBVc2VyRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzJztcbmltcG9ydCB7Z2V0VXNlcn0gZnJvbSAnLi91c2Vycyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ3BheW1lbnRzJztcbmNvbnN0IGFwaVZlcnNpb246IGFueSA9ICcyMDIwLTAzLTAyJztcblxuZXhwb3J0IGNvbnN0IGFkZEN1c3RvbWVyQWNjb3VudCA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2FkZEN1c3RvbWVyQWNjb3VudCc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkLCB1c2VybmFtZX19ID0gY29udGV4dDtcblxuICAvLyBTdHJpcGVcbiAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gbmV3IFN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSwge2FwaVZlcnNpb24sIHR5cGVzY3JpcHQ6IHRydWV9KTtcblxuICByZXR1cm4gc3RyaXBlQ2xpZW50LmN1c3RvbWVyc1xuICAgIC5jcmVhdGUoe1xuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlcklkOiBzZXNzaW9uSWQsXG4gICAgICAgIHVzZXJuYW1lXG4gICAgICB9XG4gICAgfSlcbiAgICAudGhlbigoY3VzdG9tZXIpID0+IHtcbiAgICAgIC8vIENyZWF0ZSBzZXNzaW9uXG4gICAgICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCB1cGRhdGU6IFVzZXJUeXBlID0ge1xuICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICBzdHJpcGVDdXN0b21lcklkOiBjdXN0b21lci5pZFxuICAgICAgfTtcblxuICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUERBVEUgJHtzZXNzaW9uSWR9IFdJVEggJHt1cGRhdGV9IElOIHVzZXJzIExJTUlUIDEgUkVUVVJOIE5FV2A7XG5cbiAgICAgIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAudGhlbigodXBkYXRlZFVzZXI6IFVzZXJUeXBlKSA9PiAhIXVwZGF0ZWRVc2VyKVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkQmFua0FjY291bnQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgYmFua0FjY291bnQ6IFBheW1lbnRCYW5rQWNjb3VudCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRQYXltZW50QWNjb3VudEJhbmsnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICAvLyBQYXJhbXNcbiAgY29uc3Qge1xuICAgIGFjY291bnROdW1iZXIsXG4gICAgZnVsbE5hbWUsXG4gICAgcm91dGluZ1xuICB9ID0gYmFua0FjY291bnQ7XG5cbiAgY29uc3QgZm9ybWF0QWNjb3VudDogc3RyaW5nID0gcGFyc2VTdHJpbmcoYWNjb3VudE51bWJlciwgMzIpO1xuXG4gIGlmKGZvcm1hdEFjY291bnQgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfYWNjb3VudF9udW1iZXInKTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdEZ1bGxOYW1lOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoZnVsbE5hbWUsIDEyOCk7XG5cbiAgaWYoZm9ybWF0RnVsbE5hbWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfZnVsbF9uYW1lJyk7XG4gIH1cblxuICBjb25zdCBmb3JtYXRSb3V0aW5nOiBzdHJpbmcgPSBwYXJzZVN0cmluZyhyb3V0aW5nLCAzMik7XG5cbiAgaWYoZm9ybWF0Um91dGluZyA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9yb3V0aW5nX251bWJlcicpO1xuICB9XG5cbiAgcmV0dXJuIGdldFVzZXIoY29udGV4dCwge3VzZXJJZDogc2Vzc2lvbklkfSlcbiAgICAudGhlbigodXNlcjogVXNlclR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtzdHJpcGVBY2NvdW50SWR9ID0gdXNlcjtcblxuICAgICAgLy8gU3RyaXBlXG4gICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBuZXcgU3RyaXBlKENvbmZpZy5nZXQoJ3N0cmlwZS50b2tlbicpLCB7YXBpVmVyc2lvbiwgdHlwZXNjcmlwdDogdHJ1ZX0pO1xuICAgICAgY29uc3Qgc291cmNlOiBhbnkgPSB7XG4gICAgICAgIGFjY291bnRfaG9sZGVyX25hbWU6IGZvcm1hdEZ1bGxOYW1lLFxuICAgICAgICBhY2NvdW50X2hvbGRlcl90eXBlOiAnaW5kaXZpZHVhbCcsXG4gICAgICAgIGFjY291bnRfbnVtYmVyOiBmb3JtYXRBY2NvdW50LFxuICAgICAgICBjb3VudHJ5OiAnVVMnLFxuICAgICAgICBjdXJyZW5jeTogJ1VTRCcsXG4gICAgICAgIG9iamVjdDogJ2JhbmtfYWNjb3VudCcsXG4gICAgICAgIHJvdXRpbmdfbnVtYmVyOiBmb3JtYXRSb3V0aW5nXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gc3RyaXBlQ2xpZW50LmN1c3RvbWVyc1xuICAgICAgICAuY3JlYXRlU291cmNlKHN0cmlwZUFjY291bnRJZCwge3NvdXJjZX0pXG4gICAgICAgIC50aGVuKChhY2NvdW50OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCB7aWQ6IGJhbmtJZCwgbGFzdDQ6IGJhbmtBY2NvdW50LCByb3V0aW5nX251bWJlcjogYmFua1JvdXRpbmd9ID0gYWNjb3VudDtcbiAgICAgICAgICBjb25zdCB1cGRhdGU6IGFueSA9IHtcbiAgICAgICAgICAgIGJhbmtBY2NvdW50LFxuICAgICAgICAgICAgYmFua0Z1bGxOYW1lOiBmb3JtYXRGdWxsTmFtZSxcbiAgICAgICAgICAgIGJhbmtJZCxcbiAgICAgICAgICAgIGJhbmtSb3V0aW5nLFxuICAgICAgICAgICAgbW9kaWZpZWQ6IERhdGUubm93KClcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUERBVEUgJHtzZXNzaW9uSWR9IFdJVEggJHt1cGRhdGV9IElOIHVzZXJzIExJTUlUIDEgUkVUVVJOIE5FV2A7XG5cbiAgICAgICAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgICAgICAudGhlbigodXBkYXRlZFVzZXI6IFVzZXJUeXBlKSA9PiB1cGRhdGVkVXNlcik7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc3QgbXNnID0gZXJyb3IubWVzc2FnZTtcblxuICAgICAgICAgIGlmKG1zZyA9PT0gJ0EgYmFuayBhY2NvdW50IHdpdGggdGhhdCByb3V0aW5nIG51bWJlciBhbmQgYWNjb3VudCBudW1iZXIgJyArXG4gICAgICAgICAgICAnYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMgY3VzdG9tZXIuJykge1xuICAgICAgICAgICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgICAgbGFiZWw6ICdiYW5rX2FjY291bnRfZXhpc3RzJ1xuICAgICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgIGxhYmVsOiAncGF5bWVudF9lcnJvcidcbiAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkQ3JlZGl0Q2FyZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBjYXJkOiBQYXltZW50Q2FyZFR5cGUpOiBQcm9taXNlPFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2FkZENyZWRpdENhcmQnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICByZXR1cm4gZ2V0VXNlcihjb250ZXh0LCB7dXNlcklkOiBzZXNzaW9uSWR9KVxuICAgIC50aGVuKCh1c2VyOiBVc2VyVHlwZSkgPT4ge1xuICAgICAgLy8gVXNlclxuICAgICAgY29uc3Qge3N0cmlwZUFjY291bnRJZH0gPSB1c2VyO1xuXG4gICAgICAvLyBDYXJkXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFjY291bnROdW1iZXIsXG4gICAgICAgIGNpdHksXG4gICAgICAgIGNvdW50cnksXG4gICAgICAgIGN2YyxcbiAgICAgICAgZXhwTW9udGgsXG4gICAgICAgIGV4cFllYXIsXG4gICAgICAgIGZ1bGxOYW1lLFxuICAgICAgICBzdHJlZXQxLFxuICAgICAgICBzdHJlZXQyLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgemlwXG4gICAgICB9OiBQYXltZW50Q2FyZFR5cGUgPSBjYXJkO1xuXG4gICAgICBjb25zdCBmb3JtYXROdW1iZXI6IG51bWJlciA9IHBhcnNlTnVtKGFjY291bnROdW1iZXIsIDE2KTtcblxuICAgICAgaWYoIWZvcm1hdE51bWJlcikge1xuICAgICAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9jcmVkaXRfY2FyZF9udW1iZXInKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0RXhwTW9udGg6IG51bWJlciA9IHBhcnNlTnVtKGV4cE1vbnRoLCAyKTtcblxuICAgICAgaWYoIWZvcm1hdEV4cE1vbnRoKSB7XG4gICAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3JlcXVpcmVkX2NyZWRpdF9jYXJkX2V4cF9tb250aCcpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXRFeHBZZWFyOiBudW1iZXIgPSBwYXJzZU51bShleHBZZWFyLCAyKTtcblxuICAgICAgaWYoIWZvcm1hdEV4cFllYXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfY3JlZGl0X2NhcmRfZXhwX3llYXInKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0Q3ZjOiBudW1iZXIgPSBwYXJzZU51bShjdmMsIDMpO1xuXG4gICAgICAvLyBBZGRyZXNzXG4gICAgICBjb25zdCBwYXltZW50Q2FyZDogUGF5bWVudENhcmRUeXBlID0ge307XG4gICAgICBjb25zdCBmb3JtYXRDaXR5OiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoY2l0eSwgMzIpO1xuXG4gICAgICBpZihmb3JtYXRDaXR5KSB7XG4gICAgICAgIHBheW1lbnRDYXJkLmNpdHkgPSBmb3JtYXRDaXR5O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXRDb3VudHJ5OiBzdHJpbmcgPSBwYXJzZUNoYXIoY291bnRyeSwgMik7XG5cbiAgICAgIGlmKGZvcm1hdENvdW50cnkpIHtcbiAgICAgICAgcGF5bWVudENhcmQuY291bnRyeSA9IGZvcm1hdENvdW50cnk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdEZ1bGxOYW1lOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoZnVsbE5hbWUsIDMyKTtcblxuICAgICAgaWYoZm9ybWF0RnVsbE5hbWUpIHtcbiAgICAgICAgcGF5bWVudENhcmQuZnVsbE5hbWUgPSBmb3JtYXRGdWxsTmFtZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0U3RyZWV0MTogc3RyaW5nID0gcGFyc2VWYXJDaGFyKHN0cmVldDEsIDMyKTtcblxuICAgICAgaWYoZm9ybWF0U3RyZWV0MSkge1xuICAgICAgICBwYXltZW50Q2FyZC5zdHJlZXQxID0gZm9ybWF0U3RyZWV0MTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0U3RyZWV0Mjogc3RyaW5nID0gcGFyc2VWYXJDaGFyKHN0cmVldDIsIDMyKTtcblxuICAgICAgaWYoZm9ybWF0U3RyZWV0Mikge1xuICAgICAgICBwYXltZW50Q2FyZC5zdHJlZXQyID0gZm9ybWF0U3RyZWV0MjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0U3RhdGU6IHN0cmluZyA9IHBhcnNlQ2hhcihzdGF0ZSwgMik7XG5cbiAgICAgIGlmKGZvcm1hdFN0YXRlKSB7XG4gICAgICAgIHBheW1lbnRDYXJkLnN0YXRlID0gZm9ybWF0U3RhdGU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdFppcDogc3RyaW5nID0gcGFyc2VWYXJDaGFyKHppcCwgMTApO1xuXG4gICAgICBpZihmb3JtYXRaaXApIHtcbiAgICAgICAgcGF5bWVudENhcmQuemlwID0gZm9ybWF0WmlwO1xuICAgICAgfVxuXG4gICAgICAvLyBTdHJpcGVcbiAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IG5ldyBTdHJpcGUoQ29uZmlnLmdldCgnc3RyaXBlLnRva2VuJyksIHthcGlWZXJzaW9uLCB0eXBlc2NyaXB0OiB0cnVlfSk7XG4gICAgICBjb25zdCBzb3VyY2U6IGFueSA9IHtcbiAgICAgICAgYWRkcmVzc19jaXR5OiBmb3JtYXRDaXR5LFxuICAgICAgICBhZGRyZXNzX2NvdW50cnk6IGZvcm1hdENvdW50cnksXG4gICAgICAgIGFkZHJlc3NfbGluZTE6IGZvcm1hdFN0cmVldDEsXG4gICAgICAgIGFkZHJlc3NfbGluZTI6IGZvcm1hdFN0cmVldDIsXG4gICAgICAgIGFkZHJlc3Nfc3RhdGU6IGZvcm1hdFN0YXRlLFxuICAgICAgICBhZGRyZXNzX3ppcDogZm9ybWF0WmlwLFxuICAgICAgICBjdmM6IGZvcm1hdEN2YyxcbiAgICAgICAgZXhwX21vbnRoOiBmb3JtYXRFeHBNb250aCxcbiAgICAgICAgZXhwX3llYXI6IGZvcm1hdEV4cFllYXIsXG4gICAgICAgIG5hbWU6IGZ1bGxOYW1lLFxuICAgICAgICBudW1iZXI6IGZvcm1hdE51bWJlcixcbiAgICAgICAgb2JqZWN0OiAnY2FyZCdcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzXG4gICAgICAgIC5jcmVhdGVTb3VyY2Uoc3RyaXBlQWNjb3VudElkLCB7c291cmNlfSlcbiAgICAgICAgLnRoZW4oKG5ld1NvdXJjZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3Qge2JyYW5kLCBjdmNfY2hlY2s6IGN2Y0NoZWNrLCBsYXN0NH0gPSBuZXdTb3VyY2U7XG5cbiAgICAgICAgICAvLyBDcmVhdGUgc2Vzc2lvblxuICAgICAgICAgIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBjb25zdCBpbnNlcnQgPSB7XG4gICAgICAgICAgICAuLi5wYXltZW50Q2FyZCxcbiAgICAgICAgICAgIF9rZXk6IGNyZWF0ZUhhc2goYHVzZXItcGF5bWVudC0ke3Nlc3Npb25JZH1gKSxcbiAgICAgICAgICAgIGFjY291bnROdW1iZXI6IGxhc3Q0LFxuICAgICAgICAgICAgYWRkZWQ6IG5vdyxcbiAgICAgICAgICAgIGJyYW5kLFxuICAgICAgICAgICAgY3ZjQ2hlY2ssXG4gICAgICAgICAgICBleHBNb250aCxcbiAgICAgICAgICAgIGV4cFllYXIsXG4gICAgICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGluc2VydEFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBjcmVkaXRDYXJkcyBSRVRVUk4gTkVXYDtcblxuICAgICAgICAgIHJldHVybiBkYXRhYmFzZS5xdWVyeShpbnNlcnRBcWxRcnkpXG4gICAgICAgICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgICAgIC50aGVuKChuZXdDYXJkOiBQYXltZW50Q2FyZFR5cGUpID0+IHtcbiAgICAgICAgICAgICAgaWYobmV3Q2FyZCkge1xuICAgICAgICAgICAgICAgIC8vIEFkZCBsaW5rZWQgZWRnZVxuICAgICAgICAgICAgICAgIGNvbnN0IHtfaWQ6IGNhcmRJZCwgX2tleTogY2FyZEtleX0gPSBjYXJkO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IGRhdGFiYXNlLmNvbGxlY3Rpb24oJ2hhc1BheW1lbnQnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlZGdlSWQgPSBjcmVhdGVIYXNoKGBwYXltZW50LSR7Y2FyZEtleX1gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlZGdlOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgICBfZnJvbTogYHVzZXJzLyR7c2Vzc2lvbklkfWAsXG4gICAgICAgICAgICAgICAgICBfa2V5OiBlZGdlSWQsXG4gICAgICAgICAgICAgICAgICBfdG86IGNhcmRJZFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSkudGhlbigoKSA9PiBjYXJkKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBuZXdDYXJkO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgIGxhYmVsOiAncGF5bWVudF9lcnJvcidcbiAgICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQ3JlZGl0Q2FyZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBjYXJkOiBQYXltZW50Q2FyZFR5cGUpOiBQcm9taXNlPFBheW1lbnRDYXJkVHlwZT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICBjb25zdCB7XG4gICAgY2l0eSxcbiAgICBjb3VudHJ5LFxuICAgIGV4cE1vbnRoLFxuICAgIGV4cFllYXIsXG4gICAgZnVsbE5hbWUsXG4gICAgaWQsXG4gICAgc3RyZWV0MSxcbiAgICBzdGF0ZSxcbiAgICB6aXBcbiAgfTogUGF5bWVudENhcmRUeXBlID0gY2FyZDtcblxuICBjb25zdCBmb3JtYXRJZDogc3RyaW5nID0gcGFyc2VJZChpZCk7XG5cbiAgaWYoZm9ybWF0SWQpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9jcmVkaXRfY2FyZF9pZCcpO1xuICB9XG5cbiAgY29uc3QgcGF5bWVudENhcmQ6IFBheW1lbnRDYXJkVHlwZSA9IHt9O1xuICBjb25zdCBmb3JtYXRFeHBNb250aDogbnVtYmVyID0gcGFyc2VOdW0oZXhwTW9udGgsIDIpO1xuICBjb25zdCBmb3JtYXRFeHBZZWFyOiBudW1iZXIgPSBwYXJzZU51bShleHBZZWFyLCAyKTtcbiAgY29uc3QgZm9ybWF0Q2l0eTogc3RyaW5nID0gcGFyc2VWYXJDaGFyKGNpdHksIDMyKTtcbiAgY29uc3QgZm9ybWF0Q291bnRyeTogc3RyaW5nID0gcGFyc2VDaGFyKGNvdW50cnksIDIpO1xuICBjb25zdCBmb3JtYXRGdWxsTmFtZTogc3RyaW5nID0gcGFyc2VWYXJDaGFyKGZ1bGxOYW1lLCAzMik7XG4gIGNvbnN0IGZvcm1hdFN0cmVldDE6IHN0cmluZyA9IHBhcnNlU3RyaW5nKHN0cmVldDEsIDMyKTtcbiAgY29uc3QgZm9ybWF0U3RhdGU6IHN0cmluZyA9IHBhcnNlQ2hhcihzdGF0ZSwgMik7XG4gIGNvbnN0IGZvcm1hdFppcDogc3RyaW5nID0gcGFyc2VWYXJDaGFyKHppcCwgMTApO1xuXG4gIGlmKGZvcm1hdEV4cE1vbnRoKSB7XG4gICAgcGF5bWVudENhcmQuZXhwTW9udGggPSBmb3JtYXRFeHBNb250aDtcbiAgfVxuXG4gIGlmKGZvcm1hdEV4cFllYXIpIHtcbiAgICBwYXltZW50Q2FyZC5leHBZZWFyID0gZm9ybWF0RXhwWWVhcjtcbiAgfVxuXG4gIGlmKGZvcm1hdENpdHkpIHtcbiAgICBwYXltZW50Q2FyZC5jaXR5ID0gZm9ybWF0Q2l0eTtcbiAgfVxuXG4gIGlmKGZvcm1hdENvdW50cnkpIHtcbiAgICBwYXltZW50Q2FyZC5jb3VudHJ5ID0gZm9ybWF0Q291bnRyeTtcbiAgfVxuXG4gIGlmKGZvcm1hdEZ1bGxOYW1lKSB7XG4gICAgcGF5bWVudENhcmQuZnVsbE5hbWUgPSBmb3JtYXRGdWxsTmFtZTtcbiAgfVxuXG4gIGlmKGZvcm1hdFN0cmVldDEpIHtcbiAgICBwYXltZW50Q2FyZC5zdHJlZXQxID0gZm9ybWF0U3RyZWV0MTtcbiAgfVxuXG4gIGlmKGZvcm1hdFN0YXRlKSB7XG4gICAgcGF5bWVudENhcmQuc3RhdGUgPSBmb3JtYXRTdGF0ZTtcbiAgfVxuXG4gIGlmKGZvcm1hdFppcCkge1xuICAgIHBheW1lbnRDYXJkLnppcCA9IGZvcm1hdFppcDtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZTogYW55ID0gcGF5bWVudENhcmQ7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICBMRVQgdXBkYXRlZENhcmQgPSBGSVJTVChcbiAgICAgICAgRk9SIGMgSU4gY3JlZGl0Q2FyZHNcbiAgICAgICAgRklMVEVSIGMuX2tleSA9PSAke2Zvcm1hdElkfSAmJiBjLnVzZXJJZCA9PSAke3Nlc3Npb25JZH1cbiAgICAgICAgVVBEQVRFIGMgV0lUSCAke3VwZGF0ZX0gSU4gY3JlZGl0Q2FyZHNcbiAgICAgICAgTElNSVQgMVxuICAgICAgICBSRVRVUk4gTkVXXG4gICAgICApXG4gICAgICBMRVQgdXNlciA9IEZJUlNUKFxuICAgICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgICBGSUxURVIgdS5fa2V5ID09ICR7c2Vzc2lvbklkfVxuICAgICAgICBMSU1JVCAxXG4gICAgICAgIFJFVFVSTiB1XG4gICAgICApXG4gICAgICBSRVRVUk4ge3VzZXI6IHVzZXIsIGNhcmQ6IHVwZGF0ZWRDYXJkfWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigocmVzdWx0cyA9IHtjYXJkOiB7fSwgdXNlcjoge319KSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkQ2FyZDogUGF5bWVudENhcmRUeXBlID0gcmVzdWx0cy5jYXJkO1xuICAgICAgY29uc3Qge3VzZXJ9ID0gcmVzdWx0cztcblxuICAgICAgaWYoIXVwZGF0ZWRDYXJkKSB7XG4gICAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ25vdF9mb3VuZCcpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7c3RyaXBlQ3VzdG9tZXJJZH0gPSB1c2VyO1xuICAgICAgY29uc3Qge3N0cmlwZUlkfSA9IGNhcmQ7XG5cbiAgICAgIC8vIFN0cmlwZVxuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gbmV3IFN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSwge2FwaVZlcnNpb24sIHR5cGVzY3JpcHQ6IHRydWV9KTtcbiAgICAgIGNvbnN0IHVwZGF0ZTogYW55ID0ge1xuICAgICAgICBhZGRyZXNzX2NpdHk6IGZvcm1hdENpdHksXG4gICAgICAgIGFkZHJlc3NfY291bnRyeTogZm9ybWF0Q291bnRyeSxcbiAgICAgICAgYWRkcmVzc19saW5lMTogZm9ybWF0U3RyZWV0MSxcbiAgICAgICAgYWRkcmVzc19zdGF0ZTogZm9ybWF0U3RhdGUsXG4gICAgICAgIGFkZHJlc3NfemlwOiBmb3JtYXRaaXAsXG4gICAgICAgIGV4cF9tb250aDogZm9ybWF0RXhwTW9udGgsXG4gICAgICAgIGV4cF95ZWFyOiBmb3JtYXRFeHBZZWFyLFxuICAgICAgICBuYW1lOiBmb3JtYXRGdWxsTmFtZVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHN0cmlwZUNsaWVudC5jdXN0b21lcnNcbiAgICAgICAgLnVwZGF0ZVNvdXJjZShzdHJpcGVDdXN0b21lcklkLCBzdHJpcGVJZCwgdXBkYXRlKVxuICAgICAgICAudGhlbigoKSA9PiBjYXJkKVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdwYXltZW50czo6dXBkYXRlQ2FyZDo6ZXJyb3InLCBlcnJvcik7XG4gICAgICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDcmVkaXRDYXJkcyA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxQYXltZW50Q2FyZFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRDcmVkaXRDYXJkcyc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBjIElOIGNyZWRpdENhcmRzXG4gICAgRklMVEVSIGMudXNlcklkID09ICR7c2Vzc2lvbklkfVxuICAgIFJFVFVSTiBjYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLnRoZW4oKGxpc3Q6IFBheW1lbnRDYXJkVHlwZVtdID0gW10pID0+IGxpc3QpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlQ3JlZGl0Q2FyZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBjYXJkSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q2FyZElkOiBzdHJpbmcgPSBwYXJzZUlkKGNhcmRJZCk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgTEVUIGNhcmQgPSBGSVJTVChcbiAgICAgIEZPUiBjIElOIGNyZWRpdENhcmRzXG4gICAgICBGSUxURVIgYy5fa2V5ID09ICR7Zm9ybWF0Q2FyZElkfSAmJiBjLnVzZXJJZCA9PSAke3Nlc3Npb25JZH1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFTU9WRSBjIElOIGNyZWRpdENhcmRzXG4gICAgICBSRVRVUk4gT0xEXG4gICAgKVxuICAgIExFVCB1c2VyID0gRklSU1QoXG4gICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgRklMVEVSIHUuX2tleSA9PSAke3Nlc3Npb25JZH1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiB1XG4gICAgKVxuICAgIFJFVFVSTiB7dXNlcjogdXNlciwgY2FyZDogY2FyZH1gO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHJlc3VsdCA9IHtjYXJkOiB7fSwgdXNlcjoge319KSA9PiB7XG4gICAgICBpZighcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge2NhcmQsIHVzZXJ9ID0gcmVzdWx0O1xuICAgICAgY29uc3Qge19rZXk6IGNhcmRLZXl9ID0gY2FyZDtcblxuICAgICAgLy8gUmVtb3ZlIGxpbmtlZCBlZGdlc1xuICAgICAgY29uc3QgZWRnZUNvbGxlY3Rpb24gPSBkYXRhYmFzZS5jb2xsZWN0aW9uKCdoYXNQYXltZW50Jyk7XG5cbiAgICAgIHJldHVybiBlZGdlQ29sbGVjdGlvbi5vdXRFZGdlcyhjYXJkS2V5LCB7fSlcbiAgICAgICAgLnRoZW4oKGVkZ2VzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZihlZGdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgZWRnZXMubWFwKChlZGdlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qge19rZXk6IGVkZ2VLZXl9ID0gZWRnZTtcbiAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVBcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFJFTU9WRSB7X2tleToke2VkZ2VLZXl9fSBJTiBoYXNQYXltZW50YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkocmVtb3ZlQXFsUXJ5KTtcbiAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBTdHJpcGVcbiAgICAgICAgICAgICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBuZXcgU3RyaXBlKENvbmZpZy5nZXQoJ3N0cmlwZS50b2tlbicpLCB7YXBpVmVyc2lvbiwgdHlwZXNjcmlwdDogdHJ1ZX0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmlwZUNsaWVudC5jdXN0b21lcnNcbiAgICAgICAgICAgICAgICAgIC5kZWxldGVTb3VyY2UodXNlci5zdHJpcGVDdXN0b21lcklkLCBjYXJkLnN0cmlwZUlkKVxuICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdwYXltZW50czo6ZGVsZXRlQ2FyZDo6ZXJyb3InLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3BheW1lbnRfZXJyb3InKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUJhbmtBY2NvdW50ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGJhbmtJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIC8vIENsZWFuIGRiXG4gIGNvbnN0IHVwZGF0ZTogVXNlclR5cGUgPSB7XG4gICAgYmFua0FjY291bnQ6ICcnLFxuICAgIGJhbmtGdWxsTmFtZTogJycsXG4gICAgYmFua0lkOiAnJyxcbiAgICBiYW5rUm91dGluZzogJycsXG4gICAgbW9kaWZpZWQ6IERhdGUubm93KClcbiAgfTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUERBVEUgJHtzZXNzaW9uSWR9IFdJVEggJHt1cGRhdGV9IElOIHVzZXJzIExJTUlUIDEgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodXNlcjogVXNlclR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtzdHJpcGVBY2NvdW50SWR9ID0gdXNlcjtcblxuICAgICAgLy8gU3RyaXBlXG4gICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBuZXcgU3RyaXBlKENvbmZpZy5nZXQoJ3N0cmlwZS50b2tlbicpLCB7YXBpVmVyc2lvbiwgdHlwZXNjcmlwdDogdHJ1ZX0pO1xuXG4gICAgICByZXR1cm4gc3RyaXBlQ2xpZW50LmN1c3RvbWVyc1xuICAgICAgICAuZGVsZXRlU291cmNlKHN0cmlwZUFjY291bnRJZCwgYmFua0lkKVxuICAgICAgICAudGhlbigocmVzcG9uc2U6IGFueSA9IHtkZWxldGVkOiBmYWxzZX0pID0+IHJlc3BvbnNlLmRlbGV0ZWQpXG4gICAgICAgIC5jYXRjaCgoKSA9PiBQcm9taXNlLnJlc29sdmUoZmFsc2UpKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVQYXltZW50VHJhbnNmZXIgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdHJhbnNmZXI6IFBheW1lbnRUcmFuc2Zlcik6IFByb21pc2U8UGF5bWVudFRyYW5zZmVyPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7YW1vdW50LCBjdXJyZW5jeX0gPSB0cmFuc2ZlcjtcbiAgY29uc3QgZm9ybWF0QW1vdW50OiBudW1iZXIgPSBwYXJzZU51bShhbW91bnQpO1xuICBjb25zdCBmb3JtYXRDdXJyZW5jeTogc3RyaW5nID0gcGFyc2VDaGFyKGN1cnJlbmN5LCAzLCAnVVNEJykudG9VcHBlckNhc2UoKTtcblxuICByZXR1cm4gZ2V0VXNlcihjb250ZXh0LCB7dXNlcklkOiBzZXNzaW9uSWR9KVxuICAgIC50aGVuKCh1c2VyOiBVc2VyVHlwZSkgPT4ge1xuICAgICAgY29uc3Qge3N0cmlwZUFjY291bnRJZH0gPSB1c2VyO1xuXG4gICAgICAvLyBTdHJpcGVcbiAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IG5ldyBTdHJpcGUoQ29uZmlnLmdldCgnc3RyaXBlLnRva2VuJyksIHthcGlWZXJzaW9uLCB0eXBlc2NyaXB0OiB0cnVlfSk7XG5cbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQudHJhbnNmZXJzXG4gICAgICAgIC5jcmVhdGUoe1xuICAgICAgICAgIGFtb3VudDogZm9ybWF0QW1vdW50LFxuICAgICAgICAgIGN1cnJlbmN5OiBmb3JtYXRDdXJyZW5jeSxcbiAgICAgICAgICBkZXN0aW5hdGlvbjogc3RyaXBlQWNjb3VudElkXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKChzdHJpcGVUcmFuc2ZlcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHN0cmlwZVRyYW5zZmVyKTtcbiAgICAgICAgICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gICAgICAgICAgY29uc3QgaW5zZXJ0OiBQYXltZW50VHJhbnNmZXIgPSB7XG4gICAgICAgICAgICBhZGRlZDogbm93LFxuICAgICAgICAgICAgYW1vdW50OiBmb3JtYXRBbW91bnQsXG4gICAgICAgICAgICBjdXJyZW5jeTogZm9ybWF0Q3VycmVuY3ksXG4gICAgICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiB0cmFuc2ZlcnMgUkVUVVJOIE5FV2A7XG5cbiAgICAgICAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgICAgICAudGhlbigobmV3VHJhbnNmZXI6IFBheW1lbnRUcmFuc2ZlcikgPT4gbmV3VHJhbnNmZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVQYXltZW50SG9sZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBwYXltZW50OiBQYXltZW50Q2hhcmdlKTogUHJvbWlzZTxQYXltZW50Q2hhcmdlPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7YW1vdW50LCBjYXB0dXJlLCBjYXJkSWQsIGN1cnJlbmN5LCBkZXNjcmlwdGlvbn0gPSBwYXltZW50O1xuICBjb25zdCBmb3JtYXRDdXJyZW5jeSA9IHBhcnNlQ2hhcihjdXJyZW5jeSwgMywgJ1VTRCcpLnRvVXBwZXJDYXNlKCk7XG5cbiAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gbmV3IFN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSwge2FwaVZlcnNpb24sIHR5cGVzY3JpcHQ6IHRydWV9KTtcblxuICByZXR1cm4gc3RyaXBlQ2xpZW50LmNoYXJnZXNcbiAgICAuY3JlYXRlKHtcbiAgICAgIGFtb3VudCxcbiAgICAgIGNhcHR1cmUsXG4gICAgICBjdXJyZW5jeTogZm9ybWF0Q3VycmVuY3ksXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIHNvdXJjZTogY2FyZElkXG4gICAgfSlcbiAgICAudGhlbigoc3RyaXBlQ2hhcmdlKSA9PiB7XG4gICAgICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCBpbnNlcnQ6IFBheW1lbnRDaGFyZ2UgPSB7XG4gICAgICAgIGFkZGVkOiBub3csXG4gICAgICAgIGFtb3VudCxcbiAgICAgICAgY2FwdHVyZSxcbiAgICAgICAgY2FyZElkLFxuICAgICAgICBjaGFyZ2VGYWlsQ29kZTogc3RyaXBlQ2hhcmdlLmZhaWx1cmVfY29kZSxcbiAgICAgICAgY2hhcmdlRmFpbE1zZzogc3RyaXBlQ2hhcmdlLmZhaWx1cmVfbWVzc2FnZSxcbiAgICAgICAgY2hhcmdlSWQ6IHN0cmlwZUNoYXJnZS5pZCxcbiAgICAgICAgY2hhcmdlU3RhdHVzOiBzdHJpcGVDaGFyZ2Uuc3RhdHVzLFxuICAgICAgICBjdXJyZW5jeTogZm9ybWF0Q3VycmVuY3ksXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBwYXltZW50cyBSRVRVUk4gTkVXYDtcblxuICAgICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC50aGVuKChuZXdQYXltZW50OiBQYXltZW50Q2hhcmdlKSA9PiBuZXdQYXltZW50KTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygncGF5bWVudHM6OmNyZWF0ZUhvbGQ6OmVycm9yJywgZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICAgIH0pO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUEsbUJBQWtGO0FBQ2xGLHNCQUFrQjtBQUlsQixvQkFBbUI7QUFFbkIsb0JBQXFCO0FBRXJCLDRCQUFrQztBQUNsQyxtQkFBc0I7QUFDdEIsbUJBQXlCO0FBRXpCLE1BQU0sZ0JBQXdCO0FBQzlCLE1BQU0sYUFBa0I7QUFFakIsTUFBTSxxQkFBcUIsQ0FBQyxZQUEwQztBQUMzRSxRQUFNLFNBQWlCO0FBQ3ZCLFFBQU0sRUFBQyxVQUFVLFNBQVMsRUFBQyxRQUFRLFdBQVcsU0FBUSxFQUFDLElBQUk7QUFHM0QsUUFBTSxlQUFlLElBQUksY0FBQUEsUUFBTyxxQkFBTyxJQUFJLGNBQWMsR0FBRyxFQUFDLFlBQVksWUFBWSxLQUFJ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
485
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvcGF5bWVudHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlQ2hhciwgcGFyc2VJZCwgcGFyc2VOdW0sIHBhcnNlU3RyaW5nLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCBTdHJpcGUgZnJvbSAnc3RyaXBlJztcblxuaW1wb3J0IHtBcGlDb250ZXh0LCBQYXltZW50QmFua0FjY291bnQsIFBheW1lbnRDYXJkVHlwZSwgUGF5bWVudENoYXJnZSwgUGF5bWVudFRyYW5zZmVyLCBVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtnZXRVc2VyfSBmcm9tICcuL3VzZXJzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMnO1xuaW1wb3J0IHtsb2dFcnJvciwgVXNlckVycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscyc7XG5pbXBvcnQge2dldFN0cmlwZUNsaWVudH0gZnJvbSAnLi4vdXRpbHMvc3RyaXBlVXRpbHMnO1xuXG5pbXBvcnQgdHlwZSB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb25zJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdwYXltZW50cyc7XG5cbmV4cG9ydCBjb25zdCBhZGRDdXN0b21lckFjY291bnQgPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkQ3VzdG9tZXJBY2NvdW50JztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWQsIHVzZXJuYW1lfX0gPSBjb250ZXh0O1xuXG4gIGNvbnN0IHN0cmlwZUNsaWVudCA9IGdldFN0cmlwZUNsaWVudCgpO1xuXG4gIHJldHVybiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzXG4gICAgLmNyZWF0ZSh7XG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZCxcbiAgICAgICAgdXNlcm5hbWVcbiAgICAgIH1cbiAgICB9KVxuICAgIC50aGVuKChjdXN0b21lcikgPT4ge1xuICAgICAgLy8gQ3JlYXRlIHNlc3Npb25cbiAgICAgIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IHVwZGF0ZTogVXNlclR5cGUgPSB7XG4gICAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICAgIHN0cmlwZUN1c3RvbWVySWQ6IGN1c3RvbWVyLmlkXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQREFURSAke3Nlc3Npb25JZH0gV0lUSCAke3VwZGF0ZX0gSU4gdXNlcnMgTElNSVQgMSBSRVRVUk4gTkVXYDtcblxuICAgICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgLnRoZW4oKHVwZGF0ZWRVc2VyOiBVc2VyVHlwZSkgPT4gISF1cGRhdGVkVXNlcilcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xuICAgIH0pO1xufTtcblxuaW50ZXJmYWNlIEJhbmtBY2NvdW50IHtcbiAgaWQ6IHN0cmluZztcbiAgbGFzdDQ/OiBzdHJpbmc7XG4gIHJvdXRpbmdfbnVtYmVyPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQ2FyZCB7XG4gIGlkOiBzdHJpbmc7XG4gIGJyYW5kPzogc3RyaW5nO1xuICBjdmNfY2hlY2s/OiBzdHJpbmc7XG4gIGxhc3Q0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgYWRkQmFua0FjY291bnQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgYmFua0FjY291bnQ6IFBheW1lbnRCYW5rQWNjb3VudCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkUGF5bWVudEFjY291bnRCYW5rJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgLy8gUGFyYW1zXG4gIGNvbnN0IHtcbiAgICBhY2NvdW50TnVtYmVyLFxuICAgIGZ1bGxOYW1lLFxuICAgIHJvdXRpbmdcbiAgfSA9IGJhbmtBY2NvdW50O1xuXG4gIGNvbnN0IGZvcm1hdEFjY291bnQ6IHN0cmluZyA9IHBhcnNlU3RyaW5nKGFjY291bnROdW1iZXIsIDMyKTtcblxuICBpZihmb3JtYXRBY2NvdW50ID09PSAnJykge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3JlcXVpcmVkX2FjY291bnRfbnVtYmVyJyk7XG4gIH1cblxuICBjb25zdCBmb3JtYXRGdWxsTmFtZTogc3RyaW5nID0gcGFyc2VWYXJDaGFyKGZ1bGxOYW1lLCAxMjgpO1xuXG4gIGlmKGZvcm1hdEZ1bGxOYW1lID09PSAnJykge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3JlcXVpcmVkX2Z1bGxfbmFtZScpO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0Um91dGluZzogc3RyaW5nID0gcGFyc2VTdHJpbmcocm91dGluZywgMzIpO1xuXG4gIGlmKGZvcm1hdFJvdXRpbmcgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfcm91dGluZ19udW1iZXInKTtcbiAgfVxuXG4gIHJldHVybiBnZXRVc2VyKGNvbnRleHQsIHt1c2VySWQ6IHNlc3Npb25JZH0pXG4gICAgLnRoZW4oKHVzZXI6IFVzZXJUeXBlKSA9PiB7XG4gICAgICBjb25zdCB7c3RyaXBlQWNjb3VudElkfSA9IHVzZXI7XG4gICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcblxuICAgICAgLy8gQ3JlYXRlIGEgdG9rZW4gZmlyc3QsIHRoZW4gdXNlIHRoZSB0b2tlbiBhcyB0aGUgc291cmNlXG4gICAgICByZXR1cm4gc3RyaXBlQ2xpZW50LnRva2Vucy5jcmVhdGUoe1xuICAgICAgICBiYW5rX2FjY291bnQ6IHtcbiAgICAgICAgICBhY2NvdW50X2hvbGRlcl9uYW1lOiBmb3JtYXRGdWxsTmFtZSxcbiAgICAgICAgICBhY2NvdW50X2hvbGRlcl90eXBlOiAnaW5kaXZpZHVhbCcsXG4gICAgICAgICAgYWNjb3VudF9udW1iZXI6IGZvcm1hdEFjY291bnQsXG4gICAgICAgICAgY291bnRyeTogJ1VTJyxcbiAgICAgICAgICBjdXJyZW5jeTogJ1VTRCcsXG4gICAgICAgICAgcm91dGluZ19udW1iZXI6IGZvcm1hdFJvdXRpbmdcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHRva2VuKSA9PiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzLmNyZWF0ZVNvdXJjZShcbiAgICAgICAgICBzdHJpcGVBY2NvdW50SWQsXG4gICAgICAgICAge3NvdXJjZTogdG9rZW4uaWR9XG4gICAgICAgICkpXG4gICAgICAgIC50aGVuKChhY2NvdW50KSA9PiB7XG4gICAgICAgICAgLy8gVXNlIHR5cGUgYXNzZXJ0aW9uIGZvciBjYXJkIHByb3BlcnRpZXNcbiAgICAgICAgICBjb25zdCBjYXJkU291cmNlID0gYWNjb3VudCBhcyB1bmtub3duIGFzIENhcmQ7XG4gICAgICAgICAgY29uc3QgYnJhbmQgPSBjYXJkU291cmNlLmJyYW5kIHx8ICcnO1xuICAgICAgICAgIGNvbnN0IGN2Y0NoZWNrID0gY2FyZFNvdXJjZS5jdmNfY2hlY2sgfHwgJyc7XG4gICAgICAgICAgY29uc3QgbGFzdDQgPSBjYXJkU291cmNlLmxhc3Q0IHx8ICcnO1xuXG4gICAgICAgICAgLy8gQ3JlYXRlIHNlc3Npb25cbiAgICAgICAgICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gICAgICAgICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgICAgICAgYmFua0FjY291bnQsXG4gICAgICAgICAgICBiYW5rRnVsbE5hbWU6IGZvcm1hdEZ1bGxOYW1lLFxuICAgICAgICAgICAgYmFua0lkOiBhY2NvdW50LmlkLFxuICAgICAgICAgICAgYmFua1JvdXRpbmc6IGZvcm1hdFJvdXRpbmcsXG4gICAgICAgICAgICBtb2RpZmllZDogbm93XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBEQVRFICR7c2Vzc2lvbklkfSBXSVRIICR7dXBkYXRlfSBJTiB1c2VycyBMSU1JVCAxIFJFVFVSTiBORVdgO1xuXG4gICAgICAgICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgICAgICAudGhlbigodXBkYXRlZFVzZXI6IFVzZXJUeXBlKSA9PiB1cGRhdGVkVXNlcik7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc3QgbXNnID0gZXJyb3IubWVzc2FnZTtcblxuICAgICAgICAgIGlmKG1zZyA9PT0gJ0EgYmFuayBhY2NvdW50IHdpdGggdGhhdCByb3V0aW5nIG51bWJlciBhbmQgYWNjb3VudCBudW1iZXIgJyArXG4gICAgICAgICAgJ2FscmVhZHkgZXhpc3RzIGZvciB0aGlzIGN1c3RvbWVyLicpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgIGxhYmVsOiAnYmFua19hY2NvdW50X2V4aXN0cydcbiAgICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICBsYWJlbDogJ3BheW1lbnRfZXJyb3InXG4gICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZENyZWRpdENhcmQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgY2FyZDogUGF5bWVudENhcmRUeXBlKTogUHJvbWlzZTxVc2VyVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkQ3JlZGl0Q2FyZCc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIHJldHVybiBnZXRVc2VyKGNvbnRleHQsIHt1c2VySWQ6IHNlc3Npb25JZH0pXG4gICAgLnRoZW4oKHVzZXI6IFVzZXJUeXBlKSA9PiB7XG4gICAgICAvLyBVc2VyXG4gICAgICBjb25zdCB7c3RyaXBlQWNjb3VudElkfSA9IHVzZXI7XG5cbiAgICAgIC8vIENhcmRcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYWNjb3VudE51bWJlcixcbiAgICAgICAgY2l0eSxcbiAgICAgICAgY291bnRyeSxcbiAgICAgICAgY3ZjLFxuICAgICAgICBleHBNb250aCxcbiAgICAgICAgZXhwWWVhcixcbiAgICAgICAgZnVsbE5hbWUsXG4gICAgICAgIHN0cmVldDEsXG4gICAgICAgIHN0cmVldDIsXG4gICAgICAgIHN0YXRlLFxuICAgICAgICB6aXBcbiAgICAgIH06IFBheW1lbnRDYXJkVHlwZSA9IGNhcmQ7XG5cbiAgICAgIGNvbnN0IGZvcm1hdE51bWJlcjogbnVtYmVyID0gcGFyc2VOdW0oYWNjb3VudE51bWJlciwgMTYpO1xuXG4gICAgICBpZighZm9ybWF0TnVtYmVyKSB7XG4gICAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3JlcXVpcmVkX2NyZWRpdF9jYXJkX251bWJlcicpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXRFeHBNb250aDogbnVtYmVyID0gcGFyc2VOdW0oZXhwTW9udGgsIDIpO1xuXG4gICAgICBpZighZm9ybWF0RXhwTW9udGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfY3JlZGl0X2NhcmRfZXhwX21vbnRoJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdEV4cFllYXI6IG51bWJlciA9IHBhcnNlTnVtKGV4cFllYXIsIDIpO1xuXG4gICAgICBpZighZm9ybWF0RXhwWWVhcikge1xuICAgICAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9jcmVkaXRfY2FyZF9leHBfeWVhcicpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXRDdmM6IG51bWJlciA9IHBhcnNlTnVtKGN2YywgMyk7XG5cbiAgICAgIC8vIEFkZHJlc3NcbiAgICAgIGNvbnN0IHBheW1lbnRDYXJkOiBQYXltZW50Q2FyZFR5cGUgPSB7fTtcbiAgICAgIGNvbnN0IGZvcm1hdENpdHk6IHN0cmluZyA9IHBhcnNlVmFyQ2hhcihjaXR5LCAzMik7XG5cbiAgICAgIGlmKGZvcm1hdENpdHkpIHtcbiAgICAgICAgcGF5bWVudENhcmQuY2l0eSA9IGZvcm1hdENpdHk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdENvdW50cnk6IHN0cmluZyA9IHBhcnNlQ2hhcihjb3VudHJ5LCAyKTtcblxuICAgICAgaWYoZm9ybWF0Q291bnRyeSkge1xuICAgICAgICBwYXltZW50Q2FyZC5jb3VudHJ5ID0gZm9ybWF0Q291bnRyeTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0RnVsbE5hbWU6IHN0cmluZyA9IHBhcnNlVmFyQ2hhcihmdWxsTmFtZSwgMzIpO1xuXG4gICAgICBpZihmb3JtYXRGdWxsTmFtZSkge1xuICAgICAgICBwYXltZW50Q2FyZC5mdWxsTmFtZSA9IGZvcm1hdEZ1bGxOYW1lO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXRTdHJlZXQxOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoc3RyZWV0MSwgMzIpO1xuXG4gICAgICBpZihmb3JtYXRTdHJlZXQxKSB7XG4gICAgICAgIHBheW1lbnRDYXJkLnN0cmVldDEgPSBmb3JtYXRTdHJlZXQxO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXRTdHJlZXQyOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoc3RyZWV0MiwgMzIpO1xuXG4gICAgICBpZihmb3JtYXRTdHJlZXQyKSB7XG4gICAgICAgIHBheW1lbnRDYXJkLnN0cmVldDIgPSBmb3JtYXRTdHJlZXQyO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXRTdGF0ZTogc3RyaW5nID0gcGFyc2VDaGFyKHN0YXRlLCAyKTtcblxuICAgICAgaWYoZm9ybWF0U3RhdGUpIHtcbiAgICAgICAgcGF5bWVudENhcmQuc3RhdGUgPSBmb3JtYXRTdGF0ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0WmlwOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoemlwLCAxMCk7XG5cbiAgICAgIGlmKGZvcm1hdFppcCkge1xuICAgICAgICBwYXltZW50Q2FyZC56aXAgPSBmb3JtYXRaaXA7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IGdldFN0cmlwZUNsaWVudCgpO1xuXG4gICAgICAvLyBDcmVhdGUgYSB0b2tlbiBmaXJzdCwgdGhlbiB1c2UgdGhlIHRva2VuIGFzIHRoZSBzb3VyY2VcbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQudG9rZW5zLmNyZWF0ZSh7XG4gICAgICAgIGNhcmQ6IHtcbiAgICAgICAgICBhZGRyZXNzX2NpdHk6IGZvcm1hdENpdHksXG4gICAgICAgICAgYWRkcmVzc19jb3VudHJ5OiBmb3JtYXRDb3VudHJ5LFxuICAgICAgICAgIGFkZHJlc3NfbGluZTE6IGZvcm1hdFN0cmVldDEsXG4gICAgICAgICAgYWRkcmVzc19saW5lMjogZm9ybWF0U3RyZWV0MixcbiAgICAgICAgICBhZGRyZXNzX3N0YXRlOiBmb3JtYXRTdGF0ZSxcbiAgICAgICAgICBhZGRyZXNzX3ppcDogZm9ybWF0WmlwLFxuICAgICAgICAgIGN2YzogZm9ybWF0Q3ZjLnRvU3RyaW5nKCksXG4gICAgICAgICAgZXhwX21vbnRoOiBmb3JtYXRFeHBNb250aC50b1N0cmluZygpLFxuICAgICAgICAgIGV4cF95ZWFyOiBmb3JtYXRFeHBZZWFyLnRvU3RyaW5nKCksXG4gICAgICAgICAgbmFtZTogZnVsbE5hbWUsXG4gICAgICAgICAgbnVtYmVyOiBmb3JtYXROdW1iZXIudG9TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgICAudGhlbigodG9rZW4pID0+IHN0cmlwZUNsaWVudC5jdXN0b21lcnMuY3JlYXRlU291cmNlKFxuICAgICAgICAgIHN0cmlwZUFjY291bnRJZCxcbiAgICAgICAgICB7c291cmNlOiB0b2tlbi5pZH1cbiAgICAgICAgKSlcbiAgICAgICAgLnRoZW4oKG5ld1NvdXJjZSkgPT4ge1xuICAgICAgICAvLyBVc2UgdHlwZSBhc3NlcnRpb24gZm9yIGNhcmQgcHJvcGVydGllc1xuICAgICAgICAgIGNvbnN0IGNhcmRTb3VyY2UgPSBuZXdTb3VyY2UgYXMgdW5rbm93biBhcyBDYXJkO1xuICAgICAgICAgIGNvbnN0IGJyYW5kID0gY2FyZFNvdXJjZS5icmFuZCB8fCAnJztcbiAgICAgICAgICBjb25zdCBjdmNDaGVjayA9IGNhcmRTb3VyY2UuY3ZjX2NoZWNrIHx8ICcnO1xuICAgICAgICAgIGNvbnN0IGxhc3Q0ID0gY2FyZFNvdXJjZS5sYXN0NCB8fCAnJztcblxuICAgICAgICAgIC8vIENyZWF0ZSBzZXNzaW9uXG4gICAgICAgICAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIGNvbnN0IGluc2VydCA9IHtcbiAgICAgICAgICAgIC4uLnBheW1lbnRDYXJkLFxuICAgICAgICAgICAgX2tleTogY3JlYXRlSGFzaChgdXNlci1wYXltZW50LSR7c2Vzc2lvbklkfWApLFxuICAgICAgICAgICAgYWNjb3VudE51bWJlcjogbGFzdDQsXG4gICAgICAgICAgICBhZGRlZDogbm93LFxuICAgICAgICAgICAgYnJhbmQsXG4gICAgICAgICAgICBjdmNDaGVjayxcbiAgICAgICAgICAgIGV4cE1vbnRoLFxuICAgICAgICAgICAgZXhwWWVhcixcbiAgICAgICAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgaW5zZXJ0QXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIGNyZWRpdENhcmRzIFJFVFVSTiBORVdgO1xuXG4gICAgICAgICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGluc2VydEFxbFFyeSlcbiAgICAgICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgICAgICAudGhlbigobmV3Q2FyZDogUGF5bWVudENhcmRUeXBlKSA9PiB7XG4gICAgICAgICAgICAgIGlmKG5ld0NhcmQpIHtcbiAgICAgICAgICAgICAgLy8gQWRkIGxpbmtlZCBlZGdlXG4gICAgICAgICAgICAgICAgY29uc3Qge19pZDogY2FyZElkLCBfa2V5OiBjYXJkS2V5fSA9IGNhcmQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gZGF0YWJhc2UuY29sbGVjdGlvbignaGFzUGF5bWVudCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYHBheW1lbnQtJHtjYXJkS2V5fWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVkZ2UgPSB7XG4gICAgICAgICAgICAgICAgICBfZnJvbTogYHVzZXJzLyR7c2Vzc2lvbklkfWAsXG4gICAgICAgICAgICAgICAgICBfa2V5OiBlZGdlSWQsXG4gICAgICAgICAgICAgICAgICBfdG86IGNhcmRJZFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSkudGhlbigoKSA9PiBjYXJkKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBuZXdDYXJkO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgIGxhYmVsOiAncGF5bWVudF9lcnJvcidcbiAgICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQ3JlZGl0Q2FyZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBjYXJkOiBQYXltZW50Q2FyZFR5cGUpOiBQcm9taXNlPFBheW1lbnRDYXJkVHlwZT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICBjb25zdCB7XG4gICAgY2l0eSxcbiAgICBjb3VudHJ5LFxuICAgIGV4cE1vbnRoLFxuICAgIGV4cFllYXIsXG4gICAgZnVsbE5hbWUsXG4gICAgaWQsXG4gICAgc3RyZWV0MSxcbiAgICBzdGF0ZSxcbiAgICB6aXBcbiAgfTogUGF5bWVudENhcmRUeXBlID0gY2FyZDtcblxuICBjb25zdCBmb3JtYXRJZDogc3RyaW5nID0gcGFyc2VJZChpZCk7XG5cbiAgaWYoZm9ybWF0SWQpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9jcmVkaXRfY2FyZF9pZCcpO1xuICB9XG5cbiAgY29uc3QgcGF5bWVudENhcmQ6IFBheW1lbnRDYXJkVHlwZSA9IHt9O1xuICBjb25zdCBmb3JtYXRFeHBNb250aDogbnVtYmVyID0gcGFyc2VOdW0oZXhwTW9udGgsIDIpO1xuICBjb25zdCBmb3JtYXRFeHBZZWFyOiBudW1iZXIgPSBwYXJzZU51bShleHBZZWFyLCAyKTtcbiAgY29uc3QgZm9ybWF0Q2l0eTogc3RyaW5nID0gcGFyc2VWYXJDaGFyKGNpdHksIDMyKTtcbiAgY29uc3QgZm9ybWF0Q291bnRyeTogc3RyaW5nID0gcGFyc2VDaGFyKGNvdW50cnksIDIpO1xuICBjb25zdCBmb3JtYXRGdWxsTmFtZTogc3RyaW5nID0gcGFyc2VWYXJDaGFyKGZ1bGxOYW1lLCAzMik7XG4gIGNvbnN0IGZvcm1hdFN0cmVldDE6IHN0cmluZyA9IHBhcnNlU3RyaW5nKHN0cmVldDEsIDMyKTtcbiAgY29uc3QgZm9ybWF0U3RhdGU6IHN0cmluZyA9IHBhcnNlQ2hhcihzdGF0ZSwgMik7XG4gIGNvbnN0IGZvcm1hdFppcDogc3RyaW5nID0gcGFyc2VWYXJDaGFyKHppcCwgMTApO1xuXG4gIGlmKGZvcm1hdEV4cE1vbnRoKSB7XG4gICAgcGF5bWVudENhcmQuZXhwTW9udGggPSBmb3JtYXRFeHBNb250aDtcbiAgfVxuXG4gIGlmKGZvcm1hdEV4cFllYXIpIHtcbiAgICBwYXltZW50Q2FyZC5leHBZZWFyID0gZm9ybWF0RXhwWWVhcjtcbiAgfVxuXG4gIGlmKGZvcm1hdENpdHkpIHtcbiAgICBwYXltZW50Q2FyZC5jaXR5ID0gZm9ybWF0Q2l0eTtcbiAgfVxuXG4gIGlmKGZvcm1hdENvdW50cnkpIHtcbiAgICBwYXltZW50Q2FyZC5jb3VudHJ5ID0gZm9ybWF0Q291bnRyeTtcbiAgfVxuXG4gIGlmKGZvcm1hdEZ1bGxOYW1lKSB7XG4gICAgcGF5bWVudENhcmQuZnVsbE5hbWUgPSBmb3JtYXRGdWxsTmFtZTtcbiAgfVxuXG4gIGlmKGZvcm1hdFN0cmVldDEpIHtcbiAgICBwYXltZW50Q2FyZC5zdHJlZXQxID0gZm9ybWF0U3RyZWV0MTtcbiAgfVxuXG4gIGlmKGZvcm1hdFN0YXRlKSB7XG4gICAgcGF5bWVudENhcmQuc3RhdGUgPSBmb3JtYXRTdGF0ZTtcbiAgfVxuXG4gIGlmKGZvcm1hdFppcCkge1xuICAgIHBheW1lbnRDYXJkLnppcCA9IGZvcm1hdFppcDtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZSA9IHBheW1lbnRDYXJkO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgICAgTEVUIHVwZGF0ZWRDYXJkID0gRklSU1QoXG4gICAgICAgIEZPUiBjIElOIGNyZWRpdENhcmRzXG4gICAgICAgIEZJTFRFUiBjLl9rZXkgPT0gJHtmb3JtYXRJZH0gJiYgYy51c2VySWQgPT0gJHtzZXNzaW9uSWR9XG4gICAgICAgIFVQREFURSBjIFdJVEggJHt1cGRhdGV9IElOIGNyZWRpdENhcmRzXG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgUkVUVVJOIE5FV1xuICAgICAgKVxuICAgICAgTEVUIHVzZXIgPSBGSVJTVChcbiAgICAgICAgRk9SIHUgSU4gdXNlcnNcbiAgICAgICAgRklMVEVSIHUuX2tleSA9PSAke3Nlc3Npb25JZH1cbiAgICAgICAgTElNSVQgMVxuICAgICAgICBSRVRVUk4gdVxuICAgICAgKVxuICAgICAgUkVUVVJOIHt1c2VyOiB1c2VyLCBjYXJkOiB1cGRhdGVkQ2FyZH1gO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigocmVzdWx0cyA9IHtjYXJkOiB7fSwgdXNlcjoge319KSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkQ2FyZDogUGF5bWVudENhcmRUeXBlID0gcmVzdWx0cy5jYXJkO1xuICAgICAgY29uc3Qge3VzZXJ9ID0gcmVzdWx0cztcblxuICAgICAgaWYoIXVwZGF0ZWRDYXJkKSB7XG4gICAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ25vdF9mb3VuZCcpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7c3RyaXBlQ3VzdG9tZXJJZH0gPSB1c2VyO1xuICAgICAgY29uc3Qge3N0cmlwZUlkfSA9IGNhcmQ7XG4gICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcbiAgICAgIGNvbnN0IHVwZGF0ZTogU3RyaXBlLkN1c3RvbWVyVXBkYXRlU291cmNlUGFyYW1zID0ge1xuICAgICAgICBhZGRyZXNzX2NpdHk6IGZvcm1hdENpdHksXG4gICAgICAgIGFkZHJlc3NfY291bnRyeTogZm9ybWF0Q291bnRyeSxcbiAgICAgICAgYWRkcmVzc19saW5lMTogZm9ybWF0U3RyZWV0MSxcbiAgICAgICAgYWRkcmVzc19zdGF0ZTogZm9ybWF0U3RhdGUsXG4gICAgICAgIGFkZHJlc3NfemlwOiBmb3JtYXRaaXAsXG4gICAgICAgIGV4cF9tb250aDogZm9ybWF0RXhwTW9udGgudG9TdHJpbmcoKSxcbiAgICAgICAgZXhwX3llYXI6IGZvcm1hdEV4cFllYXIudG9TdHJpbmcoKSxcbiAgICAgICAgbmFtZTogZm9ybWF0RnVsbE5hbWVcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzXG4gICAgICAgIC51cGRhdGVTb3VyY2Uoc3RyaXBlQ3VzdG9tZXJJZCwgc3RyaXBlSWQsIHVwZGF0ZSlcbiAgICAgICAgLnRoZW4oKCkgPT4gY2FyZClcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygncGF5bWVudHM6OnVwZGF0ZUNhcmQ6OmVycm9yJywgZXJyb3IpO1xuICAgICAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3BheW1lbnRfZXJyb3InKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3JlZGl0Q2FyZHMgPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8UGF5bWVudENhcmRUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldENyZWRpdENhcmRzJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGMgSU4gY3JlZGl0Q2FyZHNcbiAgICBGSUxURVIgYy51c2VySWQgPT0gJHtzZXNzaW9uSWR9XG4gICAgUkVUVVJOIGNgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKChsaXN0OiBQYXltZW50Q2FyZFR5cGVbXSA9IFtdKSA9PiBsaXN0KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUNyZWRpdENhcmQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgY2FyZElkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdENhcmRJZDogc3RyaW5nID0gcGFyc2VJZChjYXJkSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIExFVCBjYXJkID0gRklSU1QoXG4gICAgICBGT1IgYyBJTiBjcmVkaXRDYXJkc1xuICAgICAgRklMVEVSIGMuX2tleSA9PSAke2Zvcm1hdENhcmRJZH0gJiYgYy51c2VySWQgPT0gJHtzZXNzaW9uSWR9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRU1PVkUgYyBJTiBjcmVkaXRDYXJkc1xuICAgICAgUkVUVVJOIE9MRFxuICAgIClcbiAgICBMRVQgdXNlciA9IEZJUlNUKFxuICAgICAgRk9SIHUgSU4gdXNlcnNcbiAgICAgIEZJTFRFUiB1Ll9rZXkgPT0gJHtzZXNzaW9uSWR9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gdVxuICAgIClcbiAgICBSRVRVUk4ge3VzZXI6IHVzZXIsIGNhcmQ6IGNhcmR9YDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHJlc3VsdCA9IHtjYXJkOiB7fSwgdXNlcjoge319KSA9PiB7XG4gICAgICBpZighcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge2NhcmQsIHVzZXJ9ID0gcmVzdWx0O1xuICAgICAgY29uc3Qge19rZXk6IGNhcmRLZXl9ID0gY2FyZDtcblxuICAgICAgLy8gUmVtb3ZlIGxpbmtlZCBlZGdlc1xuICAgICAgY29uc3QgZWRnZUNvbGxlY3Rpb24gPSBkYXRhYmFzZS5jb2xsZWN0aW9uKCdoYXNQYXltZW50Jyk7XG5cbiAgICAgIHJldHVybiBlZGdlQ29sbGVjdGlvbi5vdXRFZGdlcyhjYXJkS2V5LCB7fSlcbiAgICAgICAgLnRoZW4oYXN5bmMgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgLy8gRXh0cmFjdCBlZGdlcyBmcm9tIHRoZSByZXNwb25zZVxuICAgICAgICAgIGNvbnN0IGVkZ2VzID0gQXJyYXkuaXNBcnJheShyZXNwb25zZSkgPyByZXNwb25zZSA6IFtdO1xuXG4gICAgICAgICAgaWYoZWRnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgZWRnZXMubWFwKChlZGdlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qge19rZXk6IGVkZ2VLZXl9ID0gZWRnZTtcbiAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVBcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFJFTU9WRSB7X2tleToke2VkZ2VLZXl9fSBJTiBoYXNQYXltZW50YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkocmVtb3ZlQXFsUXJ5KTtcbiAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBTdHJpcGVcbiAgICAgICAgICAgICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzXG4gICAgICAgICAgICAgICAgICAuZGVsZXRlU291cmNlKHVzZXIuc3RyaXBlQ3VzdG9tZXJJZCwgY2FyZC5zdHJpcGVJZClcbiAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHRydWUpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygncGF5bWVudHM6OmRlbGV0ZUNhcmQ6OmVycm9yJywgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdwYXltZW50X2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlQmFua0FjY291bnQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgYmFua0lkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgLy8gQ2xlYW4gZGJcbiAgY29uc3QgdXBkYXRlOiBVc2VyVHlwZSA9IHtcbiAgICBiYW5rQWNjb3VudDogJycsXG4gICAgYmFua0Z1bGxOYW1lOiAnJyxcbiAgICBiYW5rSWQ6ICcnLFxuICAgIGJhbmtSb3V0aW5nOiAnJyxcbiAgICBtb2RpZmllZDogRGF0ZS5ub3coKVxuICB9O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQREFURSAke3Nlc3Npb25JZH0gV0lUSCAke3VwZGF0ZX0gSU4gdXNlcnMgTElNSVQgMSBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHVzZXI6IFVzZXJUeXBlKSA9PiB7XG4gICAgICBjb25zdCB7c3RyaXBlQWNjb3VudElkfSA9IHVzZXI7XG4gICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcblxuICAgICAgcmV0dXJuIHN0cmlwZUNsaWVudC5jdXN0b21lcnNcbiAgICAgICAgLmRlbGV0ZVNvdXJjZShzdHJpcGVBY2NvdW50SWQsIGJhbmtJZClcbiAgICAgICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAgICAgLmNhdGNoKCgpID0+IFByb21pc2UucmVzb2x2ZShmYWxzZSkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBheW1lbnRUcmFuc2ZlciA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB0cmFuc2ZlcjogUGF5bWVudFRyYW5zZmVyKTogUHJvbWlzZTxQYXltZW50VHJhbnNmZXI+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHthbW91bnQsIGN1cnJlbmN5fSA9IHRyYW5zZmVyO1xuICBjb25zdCBmb3JtYXRBbW91bnQ6IG51bWJlciA9IHBhcnNlTnVtKGFtb3VudCk7XG4gIGNvbnN0IGZvcm1hdEN1cnJlbmN5OiBzdHJpbmcgPSBwYXJzZUNoYXIoY3VycmVuY3ksIDMsICdVU0QnKS50b1VwcGVyQ2FzZSgpO1xuXG4gIHJldHVybiBnZXRVc2VyKGNvbnRleHQsIHt1c2VySWQ6IHNlc3Npb25JZH0pXG4gICAgLnRoZW4oKHVzZXI6IFVzZXJUeXBlKSA9PiB7XG4gICAgICBjb25zdCB7c3RyaXBlQWNjb3VudElkfSA9IHVzZXI7XG4gICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcblxuICAgICAgcmV0dXJuIHN0cmlwZUNsaWVudC50cmFuc2ZlcnNcbiAgICAgICAgLmNyZWF0ZSh7XG4gICAgICAgICAgYW1vdW50OiBmb3JtYXRBbW91bnQsXG4gICAgICAgICAgY3VycmVuY3k6IGZvcm1hdEN1cnJlbmN5LFxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBzdHJpcGVBY2NvdW50SWRcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHN0cmlwZVRyYW5zZmVyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coc3RyaXBlVHJhbnNmZXIpO1xuICAgICAgICAgIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBjb25zdCBpbnNlcnQ6IFBheW1lbnRUcmFuc2ZlciA9IHtcbiAgICAgICAgICAgIGFkZGVkOiBub3csXG4gICAgICAgICAgICBhbW91bnQ6IGZvcm1hdEFtb3VudCxcbiAgICAgICAgICAgIGN1cnJlbmN5OiBmb3JtYXRDdXJyZW5jeSxcbiAgICAgICAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIHRyYW5zZmVycyBSRVRVUk4gTkVXYDtcblxuICAgICAgICAgIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAgICAgLnRoZW4oKG5ld1RyYW5zZmVyOiBQYXltZW50VHJhbnNmZXIpID0+IG5ld1RyYW5zZmVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUGF5bWVudEhvbGQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgcGF5bWVudDogUGF5bWVudENoYXJnZSk6IFByb21pc2U8UGF5bWVudENoYXJnZT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2Ftb3VudCwgY2FwdHVyZSwgY2FyZElkLCBjdXJyZW5jeSwgZGVzY3JpcHRpb259ID0gcGF5bWVudDtcbiAgY29uc3QgZm9ybWF0Q3VycmVuY3kgPSBwYXJzZUNoYXIoY3VycmVuY3ksIDMsICdVU0QnKS50b1VwcGVyQ2FzZSgpO1xuICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcblxuICByZXR1cm4gc3RyaXBlQ2xpZW50LmNoYXJnZXNcbiAgICAuY3JlYXRlKHtcbiAgICAgIGFtb3VudCxcbiAgICAgIGNhcHR1cmUsXG4gICAgICBjdXJyZW5jeTogZm9ybWF0Q3VycmVuY3ksXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIHNvdXJjZTogY2FyZElkXG4gICAgfSlcbiAgICAudGhlbigoc3RyaXBlQ2hhcmdlKSA9PiB7XG4gICAgICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCBpbnNlcnQ6IFBheW1lbnRDaGFyZ2UgPSB7XG4gICAgICAgIGFkZGVkOiBub3csXG4gICAgICAgIGFtb3VudCxcbiAgICAgICAgY2FwdHVyZSxcbiAgICAgICAgY2FyZElkLFxuICAgICAgICBjaGFyZ2VGYWlsQ29kZTogc3RyaXBlQ2hhcmdlLmZhaWx1cmVfY29kZSxcbiAgICAgICAgY2hhcmdlRmFpbE1zZzogc3RyaXBlQ2hhcmdlLmZhaWx1cmVfbWVzc2FnZSxcbiAgICAgICAgY2hhcmdlSWQ6IHN0cmlwZUNoYXJnZS5pZCxcbiAgICAgICAgY2hhcmdlU3RhdHVzOiBzdHJpcGVDaGFyZ2Uuc3RhdHVzLFxuICAgICAgICBjdXJyZW5jeTogZm9ybWF0Q3VycmVuY3ksXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBwYXltZW50cyBSRVRVUk4gTkVXYDtcblxuICAgICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgLnRoZW4oKG5ld1BheW1lbnQ6IFBheW1lbnRDaGFyZ2UpID0+IG5ld1BheW1lbnQpO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdwYXltZW50czo6Y3JlYXRlSG9sZDo6ZXJyb3InLCBlcnJvcik7XG4gICAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdwYXltZW50X2Vycm9yJyk7XG4gICAgfSk7XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7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
@@ -0,0 +1,3 @@
1
+ import type { ApiContext, PersonaType } from '../types';
2
+ export declare const addPersona: (context: ApiContext, persona: PersonaType) => Promise<PersonaType>;
3
+ export declare const updatePersona: (context: ApiContext, persona: PersonaType) => Promise<PersonaType>;
@@ -0,0 +1,110 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var personas_exports = {};
19
+ __export(personas_exports, {
20
+ addPersona: () => addPersona,
21
+ updatePersona: () => updatePersona
22
+ });
23
+ module.exports = __toCommonJS(personas_exports);
24
+ var import_utils = require("@nlabs/utils");
25
+ var import_aql = require("arangojs/aql");
26
+ const addPersona = (context, persona) => {
27
+ const { database } = context;
28
+ const {
29
+ city,
30
+ country,
31
+ street1,
32
+ street2,
33
+ zip,
34
+ state,
35
+ timezone,
36
+ firstName,
37
+ lastName,
38
+ gender,
39
+ name,
40
+ userId
41
+ } = persona;
42
+ const update = {
43
+ city: city !== void 0 ? (0, import_utils.parseVarChar)(city, 32) : void 0,
44
+ country: country !== void 0 ? (0, import_utils.parseVarChar)(country, 32) : void 0,
45
+ firstName: firstName !== void 0 ? (0, import_utils.parseVarChar)(firstName, 32) : void 0,
46
+ gender: gender !== void 0 ? (0, import_utils.parseChar)(gender, 1).toUpperCase() : void 0,
47
+ lastName: lastName !== void 0 ? (0, import_utils.parseVarChar)(lastName, 32) : void 0,
48
+ modified: Date.now(),
49
+ name: name !== void 0 ? (0, import_utils.parseVarChar)(name, 32) : void 0,
50
+ state: state !== void 0 ? (0, import_utils.parseVarChar)(state, 2) : void 0,
51
+ street1: street1 !== void 0 ? (0, import_utils.parseVarChar)(street1, 32) : void 0,
52
+ street2: street2 !== void 0 ? (0, import_utils.parseVarChar)(street2, 32) : void 0,
53
+ timezone: timezone !== void 0 ? (0, import_utils.parseVarChar)(timezone, 32) : void 0,
54
+ zip: zip !== void 0 ? (0, import_utils.parseVarChar)(zip, 15) : void 0
55
+ };
56
+ const insert = {
57
+ ...update,
58
+ _key: (0, import_utils.createHash)(userId),
59
+ added: Date.now(),
60
+ userId: (0, import_utils.parseId)(userId)
61
+ };
62
+ const aqlQry = import_aql.aql`UPSERT {sub: ${insert._key}}
63
+ INSERT ${insert}
64
+ UPDATE ${update}
65
+ IN users RETURN NEW`;
66
+ return database.query(aqlQry).then((cursor) => cursor.next());
67
+ };
68
+ const updatePersona = (context, persona) => {
69
+ const { database } = context;
70
+ const {
71
+ city,
72
+ country,
73
+ street1,
74
+ street2,
75
+ zip,
76
+ state,
77
+ timezone,
78
+ firstName,
79
+ lastName,
80
+ gender,
81
+ name,
82
+ userId
83
+ } = persona;
84
+ const update = {
85
+ city: city !== void 0 ? (0, import_utils.parseVarChar)(city, 32) : void 0,
86
+ country: country !== void 0 ? (0, import_utils.parseVarChar)(country, 32) : void 0,
87
+ firstName: firstName !== void 0 ? (0, import_utils.parseVarChar)(firstName, 32) : void 0,
88
+ gender: gender !== void 0 ? (0, import_utils.parseChar)(gender, 1).toUpperCase() : void 0,
89
+ lastName: lastName !== void 0 ? (0, import_utils.parseVarChar)(lastName, 32) : void 0,
90
+ modified: Date.now(),
91
+ name: name !== void 0 ? (0, import_utils.parseVarChar)(name, 32) : void 0,
92
+ state: state !== void 0 ? (0, import_utils.parseVarChar)(state, 2) : void 0,
93
+ street1: street1 !== void 0 ? (0, import_utils.parseVarChar)(street1, 32) : void 0,
94
+ street2: street2 !== void 0 ? (0, import_utils.parseVarChar)(street2, 32) : void 0,
95
+ timezone: timezone !== void 0 ? (0, import_utils.parseVarChar)(timezone, 32) : void 0,
96
+ userId: userId !== void 0 ? (0, import_utils.parseId)(userId) : void 0,
97
+ zip: zip !== void 0 ? (0, import_utils.parseVarChar)(zip, 15) : void 0
98
+ };
99
+ const aqlQry = import_aql.aql`UPDATE {sub: ${persona._key}}
100
+ INSERT ${persona}
101
+ UPDATE ${update}
102
+ IN users RETURN NEW`;
103
+ return database.query(aqlQry).then((cursor) => cursor.next());
104
+ };
105
+ // Annotate the CommonJS export names for ESM import in node:
106
+ 0 && (module.exports = {
107
+ addPersona,
108
+ updatePersona
109
+ });
110
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvcGVyc29uYXMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VDaGFyLCBwYXJzZUlkLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbCwgdHlwZSBBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcblxuaW1wb3J0IHR5cGUge0FwaUNvbnRleHQsIFBlcnNvbmFUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBhZGRQZXJzb25hID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBlcnNvbmE6IFBlcnNvbmFUeXBlKTogUHJvbWlzZTxQZXJzb25hVHlwZT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGNpdHksXG4gICAgY291bnRyeSxcbiAgICBzdHJlZXQxLFxuICAgIHN0cmVldDIsXG4gICAgemlwLFxuICAgIHN0YXRlLFxuICAgIHRpbWV6b25lLFxuICAgIGZpcnN0TmFtZSxcbiAgICBsYXN0TmFtZSxcbiAgICBnZW5kZXIsXG4gICAgbmFtZSxcbiAgICB1c2VySWRcbiAgfSA9IHBlcnNvbmE7XG5cbiAgY29uc3QgdXBkYXRlOiBQZXJzb25hVHlwZSA9IHtcbiAgICBjaXR5OiBjaXR5ICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoY2l0eSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIGNvdW50cnk6IGNvdW50cnkgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihjb3VudHJ5LCAzMikgOiB1bmRlZmluZWQsXG4gICAgZmlyc3ROYW1lOiBmaXJzdE5hbWUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihmaXJzdE5hbWUsIDMyKSA6IHVuZGVmaW5lZCxcbiAgICBnZW5kZXI6IGdlbmRlciAhPT0gdW5kZWZpbmVkID8gcGFyc2VDaGFyKGdlbmRlciwgMSkudG9VcHBlckNhc2UoKSA6IHVuZGVmaW5lZCxcbiAgICBsYXN0TmFtZTogbGFzdE5hbWUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihsYXN0TmFtZSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgIG5hbWU6IG5hbWUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihuYW1lLCAzMikgOiB1bmRlZmluZWQsXG4gICAgc3RhdGU6IHN0YXRlICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoc3RhdGUsIDIpIDogdW5kZWZpbmVkLFxuICAgIHN0cmVldDE6IHN0cmVldDEgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihzdHJlZXQxLCAzMikgOiB1bmRlZmluZWQsXG4gICAgc3RyZWV0Mjogc3RyZWV0MiAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKHN0cmVldDIsIDMyKSA6IHVuZGVmaW5lZCxcbiAgICB0aW1lem9uZTogdGltZXpvbmUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcih0aW1lem9uZSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIHppcDogemlwICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoemlwLCAxNSkgOiB1bmRlZmluZWRcbiAgfTtcblxuICBjb25zdCBpbnNlcnQ6IFBlcnNvbmFUeXBlID0ge1xuICAgIC4uLnVwZGF0ZSxcbiAgICBfa2V5OiBjcmVhdGVIYXNoKHVzZXJJZCksXG4gICAgYWRkZWQ6IERhdGUubm93KCksXG4gICAgdXNlcklkOiBwYXJzZUlkKHVzZXJJZClcbiAgfTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7c3ViOiAke2luc2VydC5fa2V5fX1cbiAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgVVBEQVRFICR7dXBkYXRlfVxuICAgIElOIHVzZXJzIFJFVFVSTiBORVdgO1xuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVBlcnNvbmEgPSAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYTogUGVyc29uYVR5cGUpOiBQcm9taXNlPFBlcnNvbmFUeXBlPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCB7XG4gICAgY2l0eSxcbiAgICBjb3VudHJ5LFxuICAgIHN0cmVldDEsXG4gICAgc3RyZWV0MixcbiAgICB6aXAsXG4gICAgc3RhdGUsXG4gICAgdGltZXpvbmUsXG4gICAgZmlyc3ROYW1lLFxuICAgIGxhc3ROYW1lLFxuICAgIGdlbmRlcixcbiAgICBuYW1lLFxuICAgIHVzZXJJZFxuICB9ID0gcGVyc29uYTtcblxuICBjb25zdCB1cGRhdGU6IFBlcnNvbmFUeXBlID0ge1xuICAgIGNpdHk6IGNpdHkgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihjaXR5LCAzMikgOiB1bmRlZmluZWQsXG4gICAgY291bnRyeTogY291bnRyeSAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKGNvdW50cnksIDMyKSA6IHVuZGVmaW5lZCxcbiAgICBmaXJzdE5hbWU6IGZpcnN0TmFtZSAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKGZpcnN0TmFtZSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIGdlbmRlcjogZ2VuZGVyICE9PSB1bmRlZmluZWQgPyBwYXJzZUNoYXIoZ2VuZGVyLCAxKS50b1VwcGVyQ2FzZSgpIDogdW5kZWZpbmVkLFxuICAgIGxhc3ROYW1lOiBsYXN0TmFtZSAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKGxhc3ROYW1lLCAzMikgOiB1bmRlZmluZWQsXG4gICAgbW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgbmFtZTogbmFtZSAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKG5hbWUsIDMyKSA6IHVuZGVmaW5lZCxcbiAgICBzdGF0ZTogc3RhdGUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihzdGF0ZSwgMikgOiB1bmRlZmluZWQsXG4gICAgc3RyZWV0MTogc3RyZWV0MSAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKHN0cmVldDEsIDMyKSA6IHVuZGVmaW5lZCxcbiAgICBzdHJlZXQyOiBzdHJlZXQyICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoc3RyZWV0MiwgMzIpIDogdW5kZWZpbmVkLFxuICAgIHRpbWV6b25lOiB0aW1lem9uZSAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKHRpbWV6b25lLCAzMikgOiB1bmRlZmluZWQsXG4gICAgdXNlcklkOiB1c2VySWQgIT09IHVuZGVmaW5lZCA/IHBhcnNlSWQodXNlcklkKSA6IHVuZGVmaW5lZCxcbiAgICB6aXA6IHppcCAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKHppcCwgMTUpIDogdW5kZWZpbmVkXG4gIH07XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUERBVEUge3N1YjogJHtwZXJzb25hLl9rZXl9fVxuICAgIElOU0VSVCAke3BlcnNvbmF9XG4gICAgVVBEQVRFICR7dXBkYXRlfVxuICAgIElOIHVzZXJzIFJFVFVSTiBORVdgO1xuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xufTsiXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUEyRDtBQUMzRCxpQkFBaUM7QUFJMUIsTUFBTSxhQUFhLENBQUMsU0FBcUIsWUFBK0M7QUFDN0YsUUFBTSxFQUFDLFNBQVEsSUFBSTtBQUNuQixRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFD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
@@ -5,7 +5,10 @@ export declare const parsePostOptions: (options?: PostOptions) => {
5
5
  longitude: number;
6
6
  type: string;
7
7
  };
8
- export declare const getPostOptional: (fields: string[], sessionId: string) => any;
8
+ export declare const getPostOptional: (fields: string[], sessionId: string) => {
9
+ objects: any[];
10
+ queries: any[];
11
+ };
9
12
  export declare const getPost: (context: ApiContext, postId: string, options?: PostOptions) => Promise<PostType>;
10
13
  export declare const getPostsByArea: (context: ApiContext, latitude: number, longitude: number, options?: PostOptions) => Promise<PostType[]>;
11
14
  export declare const getPostsByLatest: (context: ApiContext, options?: PostOptions) => Promise<PostType[]>;
@@ -16,4 +19,4 @@ export declare const getPostComments: (context: ApiContext, postId: string, opti
16
19
  export declare const addPost: (context: ApiContext, { content, endDate, groupId, location, latitude, longitude, name, parentId, privacy, tags, startDate, type }: PostInputType) => Promise<PostType>;
17
20
  export declare const updatePost: (context: ApiContext, post: PostInputType) => Promise<PostType>;
18
21
  export declare const deletePost: (context: ApiContext, postDocId: string) => Promise<PostType>;
19
- export declare const createPostEdge: (context: ApiContext, postDocId: string, itemDocId: string, edgeType?: string, props?: any) => Promise<FileType>;
22
+ export declare const createPostEdge: (context: ApiContext, postDocId: string, itemDocId: string, edgeType?: string, props?: {}) => Promise<FileType>;