@appconda/nextjs 1.0.115 → 1.0.116

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 (293) hide show
  1. package/dist/actions/actionClient.d.ts +10 -0
  2. package/dist/actions/actionClient.js +41 -0
  3. package/dist/actions/auth.d.ts +1 -0
  4. package/dist/actions/auth.js +7 -0
  5. package/dist/actions/authOptions.d.ts +5 -0
  6. package/dist/actions/authOptions.js +235 -0
  7. package/dist/actions/index.d.ts +3 -0
  8. package/dist/actions/index.js +4 -0
  9. package/dist/actions/nextAuthHandler.d.ts +1 -0
  10. package/dist/actions/nextAuthHandler.js +6 -0
  11. package/dist/client.d.ts +141 -0
  12. package/dist/client.js +335 -0
  13. package/dist/decorators/Cache.d.ts +1 -0
  14. package/dist/decorators/Cache.js +79 -0
  15. package/dist/decorators/CacheKey.d.ts +1 -0
  16. package/dist/decorators/CacheKey.js +9 -0
  17. package/dist/decorators/Invalidate.d.ts +1 -0
  18. package/dist/decorators/Invalidate.js +47 -0
  19. package/dist/enums/api-service.d.ts +13 -0
  20. package/dist/enums/api-service.js +15 -0
  21. package/dist/enums/api.d.ts +5 -0
  22. package/dist/enums/api.js +7 -0
  23. package/dist/enums/auth-method.d.ts +9 -0
  24. package/dist/enums/auth-method.js +11 -0
  25. package/dist/enums/browser.d.ts +16 -0
  26. package/dist/enums/browser.js +18 -0
  27. package/dist/enums/compression.d.ts +5 -0
  28. package/dist/enums/compression.js +7 -0
  29. package/dist/enums/credit-card.d.ts +18 -0
  30. package/dist/enums/credit-card.js +20 -0
  31. package/dist/enums/database-usage-range.d.ts +5 -0
  32. package/dist/enums/database-usage-range.js +7 -0
  33. package/dist/enums/email-template-locale.d.ts +133 -0
  34. package/dist/enums/email-template-locale.js +135 -0
  35. package/dist/enums/email-template-type.d.ts +9 -0
  36. package/dist/enums/email-template-type.js +11 -0
  37. package/dist/enums/entities/EntityLimitType.d.ts +4 -0
  38. package/dist/enums/entities/EntityLimitType.js +6 -0
  39. package/dist/enums/entities/PropertyAttributeName.d.ts +27 -0
  40. package/dist/enums/entities/PropertyAttributeName.js +29 -0
  41. package/dist/enums/entities/PropertyCondition.d.ts +7 -0
  42. package/dist/enums/entities/PropertyCondition.js +10 -0
  43. package/dist/enums/entities/PropertyType.d.ts +12 -0
  44. package/dist/enums/entities/PropertyType.js +18 -0
  45. package/dist/enums/entities/PropertyValueType.d.ts +6 -0
  46. package/dist/enums/entities/PropertyValueType.js +8 -0
  47. package/dist/enums/entities/RowAccess.d.ts +2 -0
  48. package/dist/enums/entities/RowAccess.js +2 -0
  49. package/dist/enums/entities/ViewFilterCondition.d.ts +12 -0
  50. package/dist/enums/entities/ViewFilterCondition.js +14 -0
  51. package/dist/enums/execution-method.d.ts +8 -0
  52. package/dist/enums/execution-method.js +10 -0
  53. package/dist/enums/flag.d.ts +197 -0
  54. package/dist/enums/flag.js +199 -0
  55. package/dist/enums/function-usage-range.d.ts +5 -0
  56. package/dist/enums/function-usage-range.js +7 -0
  57. package/dist/enums/image-format.d.ts +7 -0
  58. package/dist/enums/image-format.js +9 -0
  59. package/dist/enums/image-gravity.d.ts +11 -0
  60. package/dist/enums/image-gravity.js +13 -0
  61. package/dist/enums/index-type.d.ts +5 -0
  62. package/dist/enums/index-type.js +7 -0
  63. package/dist/enums/messaging-provider-type.d.ts +5 -0
  64. package/dist/enums/messaging-provider-type.js +7 -0
  65. package/dist/enums/name.d.ts +14 -0
  66. package/dist/enums/name.js +16 -0
  67. package/dist/enums/o-auth-provider copy.d.ts +41 -0
  68. package/dist/enums/o-auth-provider copy.js +43 -0
  69. package/dist/enums/password-hash.d.ts +13 -0
  70. package/dist/enums/password-hash.js +15 -0
  71. package/dist/enums/platform-type.d.ts +17 -0
  72. package/dist/enums/platform-type.js +19 -0
  73. package/dist/enums/project-usage-range.d.ts +4 -0
  74. package/dist/enums/project-usage-range.js +6 -0
  75. package/dist/enums/region.d.ts +4 -0
  76. package/dist/enums/region.js +6 -0
  77. package/dist/enums/relation-mutate.d.ts +5 -0
  78. package/dist/enums/relation-mutate.js +7 -0
  79. package/dist/enums/relationship-type.d.ts +6 -0
  80. package/dist/enums/relationship-type.js +8 -0
  81. package/dist/enums/resource-type.d.ts +4 -0
  82. package/dist/enums/resource-type.js +6 -0
  83. package/dist/enums/runtime.d.ts +48 -0
  84. package/dist/enums/runtime.js +50 -0
  85. package/dist/enums/s-m-t-p-secure.d.ts +3 -0
  86. package/dist/enums/s-m-t-p-secure.js +5 -0
  87. package/dist/enums/shared/ApplicationLayout.d.ts +4 -0
  88. package/dist/enums/shared/ApplicationLayout.js +6 -0
  89. package/dist/enums/shared/Colors.d.ts +24 -0
  90. package/dist/enums/shared/Colors.js +26 -0
  91. package/dist/enums/shared/InputType.d.ts +6 -0
  92. package/dist/enums/shared/InputType.js +8 -0
  93. package/dist/enums/shared/Periodicity.d.ts +7 -0
  94. package/dist/enums/shared/Periodicity.js +9 -0
  95. package/dist/enums/shared/SvgIcon.d.ts +37 -0
  96. package/dist/enums/shared/SvgIcon.js +39 -0
  97. package/dist/enums/shared/Theme.d.ts +4 -0
  98. package/dist/enums/shared/Theme.js +6 -0
  99. package/dist/enums/sms-template-locale.d.ts +133 -0
  100. package/dist/enums/sms-template-locale.js +135 -0
  101. package/dist/enums/sms-template-type.d.ts +6 -0
  102. package/dist/enums/sms-template-type.js +8 -0
  103. package/dist/enums/smtp-encryption.d.ts +5 -0
  104. package/dist/enums/smtp-encryption.js +7 -0
  105. package/dist/enums/storage-usage-range.d.ts +5 -0
  106. package/dist/enums/storage-usage-range.js +7 -0
  107. package/dist/enums/subscriptions/PricingModel.d.ts +11 -0
  108. package/dist/enums/subscriptions/PricingModel.js +12 -0
  109. package/dist/enums/subscriptions/SubscriptionBillingPeriod.d.ts +10 -0
  110. package/dist/enums/subscriptions/SubscriptionBillingPeriod.js +11 -0
  111. package/dist/enums/subscriptions/SubscriptionFeatureLimitType.d.ts +10 -0
  112. package/dist/enums/subscriptions/SubscriptionFeatureLimitType.js +13 -0
  113. package/dist/enums/subscriptions/SubscriptionPriceType.d.ts +7 -0
  114. package/dist/enums/subscriptions/SubscriptionPriceType.js +8 -0
  115. package/dist/enums/tenants/LinkedAccountStatus.d.ts +5 -0
  116. package/dist/enums/tenants/LinkedAccountStatus.js +7 -0
  117. package/dist/enums/tenants/TenantUserJoined.d.ts +6 -0
  118. package/dist/enums/tenants/TenantUserJoined.js +8 -0
  119. package/dist/enums/tenants/TenantUserStatus.d.ts +6 -0
  120. package/dist/enums/tenants/TenantUserStatus.js +8 -0
  121. package/dist/enums/tenants/TenantUserType.d.ts +5 -0
  122. package/dist/enums/tenants/TenantUserType.js +7 -0
  123. package/dist/enums/user-usage-range.d.ts +5 -0
  124. package/dist/enums/user-usage-range.js +7 -0
  125. package/dist/getAppcondaClient.d.ts +2 -0
  126. package/dist/getAppcondaClient.js +44 -0
  127. package/dist/getSDKForCurrentUser.d.ts +43 -0
  128. package/dist/getSDKForCurrentUser.js +76 -0
  129. package/dist/getSDKForService.d.ts +6 -0
  130. package/dist/getSDKForService.js +51 -0
  131. package/dist/getSDKForTenant.d.ts +20 -0
  132. package/dist/getSDKForTenant.js +44 -0
  133. package/dist/id.d.ts +20 -0
  134. package/dist/id.js +45 -0
  135. package/dist/index.d.ts +44 -0
  136. package/dist/index.js +42 -0
  137. package/dist/inputFile.d.ts +6 -0
  138. package/dist/inputFile.js +17 -0
  139. package/dist/lib/Cache/Adapter.d.ts +10 -0
  140. package/dist/lib/Cache/Adapter.js +2 -0
  141. package/dist/lib/Cache/Adapters/Filesystem.d.ts +16 -0
  142. package/dist/lib/Cache/Adapters/Filesystem.js +103 -0
  143. package/dist/lib/Cache/Adapters/Memory.d.ts +18 -0
  144. package/dist/lib/Cache/Adapters/Memory.js +47 -0
  145. package/dist/lib/Cache/Adapters/None.d.ts +12 -0
  146. package/dist/lib/Cache/Adapters/None.js +28 -0
  147. package/dist/lib/Cache/Adapters/Sharding.d.ts +17 -0
  148. package/dist/lib/Cache/Adapters/Sharding.js +73 -0
  149. package/dist/lib/Cache/Cache.d.ts +16 -0
  150. package/dist/lib/Cache/Cache.js +52 -0
  151. package/dist/lib/Cache/index.d.ts +4 -0
  152. package/dist/lib/Cache/index.js +5 -0
  153. package/dist/lib/Cache/test.d.ts +0 -0
  154. package/dist/lib/Cache/test.js +1 -0
  155. package/dist/lib/Registry/Registry.d.ts +38 -0
  156. package/dist/lib/Registry/Registry.js +56 -0
  157. package/dist/lib/Registry/index.d.ts +1 -0
  158. package/dist/lib/Registry/index.js +2 -0
  159. package/dist/lib/Services.d.ts +6 -0
  160. package/dist/lib/Services.js +14 -0
  161. package/dist/lib/crypto.d.ts +23 -0
  162. package/dist/lib/crypto.js +78 -0
  163. package/dist/lib/env.d.ts +1 -0
  164. package/dist/lib/env.js +137 -0
  165. package/dist/lib/errors.d.ts +70 -0
  166. package/dist/lib/errors.js +76 -0
  167. package/dist/lib/index.d.ts +2 -0
  168. package/dist/lib/index.js +3 -0
  169. package/dist/lib/jwt.d.ts +12 -0
  170. package/dist/lib/jwt.js +103 -0
  171. package/dist/models.d.ts +3272 -0
  172. package/dist/models.js +2 -0
  173. package/dist/modules/account/actions.d.ts +31 -0
  174. package/dist/modules/account/actions.js +18 -0
  175. package/dist/modules/account/enums/authentication-factor.d.ts +6 -0
  176. package/dist/modules/account/enums/authentication-factor.js +8 -0
  177. package/dist/modules/account/enums/authenticator-type.d.ts +3 -0
  178. package/dist/modules/account/enums/authenticator-type.js +5 -0
  179. package/dist/modules/account/enums/o-auth-provider.d.ts +41 -0
  180. package/dist/modules/account/enums/o-auth-provider.js +43 -0
  181. package/dist/modules/account/index.d.ts +3 -0
  182. package/dist/modules/account/index.js +4 -0
  183. package/dist/modules/account/schema.d.ts +17 -0
  184. package/dist/modules/account/schema.js +8 -0
  185. package/dist/modules/account/service.d.ts +530 -0
  186. package/dist/modules/account/service.js +1260 -0
  187. package/dist/modules/account/types.d.ts +411 -0
  188. package/dist/modules/account/types.js +2 -0
  189. package/dist/modules/acl/service.d.ts +26 -0
  190. package/dist/modules/acl/service.js +27 -0
  191. package/dist/modules/agent/action.d.ts +57 -0
  192. package/dist/modules/agent/action.js +64 -0
  193. package/dist/modules/agent/index.d.ts +4 -0
  194. package/dist/modules/agent/index.js +5 -0
  195. package/dist/modules/agent/schema.d.ts +48 -0
  196. package/dist/modules/agent/schema.js +21 -0
  197. package/dist/modules/agent/service.d.ts +12 -0
  198. package/dist/modules/agent/service.js +22 -0
  199. package/dist/modules/agent/types.d.ts +11 -0
  200. package/dist/modules/agent/types.js +2 -0
  201. package/dist/modules/ai/index.d.ts +1 -0
  202. package/dist/modules/ai/index.js +2 -0
  203. package/dist/modules/ai/node/actions.d.ts +4 -0
  204. package/dist/modules/ai/node/actions.js +16 -0
  205. package/dist/modules/ai/node/index.d.ts +2 -0
  206. package/dist/modules/ai/node/index.js +3 -0
  207. package/dist/modules/ai/node/service.d.ts +5 -0
  208. package/dist/modules/ai/node/service.js +12 -0
  209. package/dist/modules/index.d.ts +6 -0
  210. package/dist/modules/index.js +7 -0
  211. package/dist/modules/task/action.d.ts +201 -0
  212. package/dist/modules/task/action.js +147 -0
  213. package/dist/modules/task/index.d.ts +4 -0
  214. package/dist/modules/task/index.js +5 -0
  215. package/dist/modules/task/schema.d.ts +107 -0
  216. package/dist/modules/task/schema.js +44 -0
  217. package/dist/modules/task/service.d.ts +19 -0
  218. package/dist/modules/task/service.js +43 -0
  219. package/dist/modules/task/types.d.ts +84 -0
  220. package/dist/modules/task/types.js +2 -0
  221. package/dist/modules/tenant/actions.d.ts +49 -0
  222. package/dist/modules/tenant/actions.js +38 -0
  223. package/dist/modules/tenant/index.d.ts +3 -0
  224. package/dist/modules/tenant/index.js +4 -0
  225. package/dist/modules/tenant/tenant.d.ts +32 -0
  226. package/dist/modules/tenant/tenant.js +125 -0
  227. package/dist/modules/tenant/types.d.ts +11 -0
  228. package/dist/modules/tenant/types.js +2 -0
  229. package/dist/modules/waitlist/action.d.ts +71 -0
  230. package/dist/modules/waitlist/action.js +78 -0
  231. package/dist/modules/waitlist/index.d.ts +4 -0
  232. package/dist/modules/waitlist/index.js +5 -0
  233. package/dist/modules/waitlist/schema.d.ts +39 -0
  234. package/dist/modules/waitlist/schema.js +18 -0
  235. package/dist/modules/waitlist/service.d.ts +13 -0
  236. package/dist/modules/waitlist/service.js +28 -0
  237. package/dist/modules/waitlist/types.d.ts +14 -0
  238. package/dist/modules/waitlist/types.js +2 -0
  239. package/dist/permission.d.ts +43 -0
  240. package/dist/permission.js +54 -0
  241. package/dist/query.d.ts +194 -0
  242. package/dist/query.js +204 -0
  243. package/dist/role.d.ts +70 -0
  244. package/dist/role.js +94 -0
  245. package/dist/schemas/nodes.d.ts +0 -0
  246. package/dist/schemas/nodes.js +1 -0
  247. package/dist/service-client.d.ts +7 -0
  248. package/dist/service-client.js +14 -0
  249. package/dist/service.d.ts +11 -0
  250. package/dist/service.js +23 -0
  251. package/dist/services/applets.d.ts +9 -0
  252. package/dist/services/applets.js +40 -0
  253. package/dist/services/avatars.d.ts +115 -0
  254. package/dist/services/avatars.js +251 -0
  255. package/dist/services/chat-flow.d.ts +7 -0
  256. package/dist/services/chat-flow.js +26 -0
  257. package/dist/services/community.d.ts +19 -0
  258. package/dist/services/community.js +69 -0
  259. package/dist/services/configuration.d.ts +5 -0
  260. package/dist/services/configuration.js +11 -0
  261. package/dist/services/databases.d.ts +613 -0
  262. package/dist/services/databases.js +1736 -0
  263. package/dist/services/functions.d.ts +319 -0
  264. package/dist/services/functions.js +810 -0
  265. package/dist/services/graphql.d.ts +25 -0
  266. package/dist/services/graphql.js +57 -0
  267. package/dist/services/health.d.ts +231 -0
  268. package/dist/services/health.js +463 -0
  269. package/dist/services/locale.d.ts +80 -0
  270. package/dist/services/locale.js +144 -0
  271. package/dist/services/messaging.d.ts +685 -0
  272. package/dist/services/messaging.js +1920 -0
  273. package/dist/services/permissions.d.ts +20 -0
  274. package/dist/services/permissions.js +90 -0
  275. package/dist/services/pricing.d.ts +15 -0
  276. package/dist/services/pricing.js +21 -0
  277. package/dist/services/projects.d.ts +542 -0
  278. package/dist/services/projects.js +1526 -0
  279. package/dist/services/roles.d.ts +19 -0
  280. package/dist/services/roles.js +72 -0
  281. package/dist/services/schema.d.ts +17 -0
  282. package/dist/services/schema.js +48 -0
  283. package/dist/services/storage.d.ts +189 -0
  284. package/dist/services/storage.js +474 -0
  285. package/dist/services/subscription.d.ts +15 -0
  286. package/dist/services/subscription.js +30 -0
  287. package/dist/services/teams.d.ts +167 -0
  288. package/dist/services/teams.js +395 -0
  289. package/dist/services/tenant-subscription.d.ts +12 -0
  290. package/dist/services/tenant-subscription.js +52 -0
  291. package/dist/services/users.d.ts +499 -0
  292. package/dist/services/users.js +1283 -0
  293. package/package.json +3 -3
@@ -0,0 +1,167 @@
1
+ import { Client } from '../client';
2
+ import type { Models } from '../models';
3
+ export declare class Teams {
4
+ client: Client;
5
+ constructor(client: Client);
6
+ /**
7
+ * List teams
8
+ *
9
+ * Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.
10
+ *
11
+ * @param {string[]} queries
12
+ * @param {string} search
13
+ * @throws {AppcondaException}
14
+ * @returns {Promise<Models.TeamList<Preferences>>}
15
+ */
16
+ list<Preferences extends Models.Preferences>(queries?: string[], search?: string): Promise<Models.TeamList<Preferences>>;
17
+ /**
18
+ * Create team
19
+ *
20
+ * Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.
21
+ *
22
+ * @param {string} teamId
23
+ * @param {string} name
24
+ * @param {string[]} roles
25
+ * @throws {AppcondaException}
26
+ * @returns {Promise<Models.Team<Preferences>>}
27
+ */
28
+ create<Preferences extends Models.Preferences>(teamId: string, name: string, roles?: string[]): Promise<Models.Team<Preferences>>;
29
+ /**
30
+ * Get team
31
+ *
32
+ * Get a team by its ID. All team members have read access for this resource.
33
+ *
34
+ * @param {string} teamId
35
+ * @throws {AppcondaException}
36
+ * @returns {Promise<Models.Team<Preferences>>}
37
+ */
38
+ get<Preferences extends Models.Preferences>(teamId: string): Promise<Models.Team<Preferences>>;
39
+ /**
40
+ * Update name
41
+ *
42
+ * Update the team&#039;s name by its unique ID.
43
+ *
44
+ * @param {string} teamId
45
+ * @param {string} name
46
+ * @throws {AppcondaException}
47
+ * @returns {Promise<Models.Team<Preferences>>}
48
+ */
49
+ updateName<Preferences extends Models.Preferences>(teamId: string, name: string): Promise<Models.Team<Preferences>>;
50
+ /**
51
+ * Delete team
52
+ *
53
+ * Delete a team using its ID. Only team members with the owner role can delete the team.
54
+ *
55
+ * @param {string} teamId
56
+ * @throws {AppcondaException}
57
+ * @returns {Promise<{}>}
58
+ */
59
+ delete(teamId: string): Promise<{}>;
60
+ /**
61
+ * List team memberships
62
+ *
63
+ * Use this endpoint to list a team&#039;s members using the team&#039;s ID. All team members have read access to this endpoint.
64
+ *
65
+ * @param {string} teamId
66
+ * @param {string[]} queries
67
+ * @param {string} search
68
+ * @throws {AppcondaException}
69
+ * @returns {Promise<Models.MembershipList>}
70
+ */
71
+ listMemberships(teamId: string, queries?: string[], search?: string): Promise<Models.MembershipList>;
72
+ /**
73
+ * Create team membership
74
+ *
75
+ * Invite a new member to join your team. Provide an ID for existing users, or invite unregistered users using an email or phone number. If initiated from a Client SDK, Appconda will send an email or sms with a link to join the team to the invited user, and an account will be created for them if one doesn&#039;t exist. If initiated from a Server SDK, the new member will be added automatically to the team.
76
+
77
+ You only need to provide one of a user ID, email, or phone number. Appconda will prioritize accepting the user ID &gt; email &gt; phone number if you provide more than one of these parameters.
78
+
79
+ Use the `url` parameter to redirect the user from the invitation email to your app. After the user is redirected, use the [Update Team Membership Status](https://appconda.io/docs/references/cloud/client-web/teams#updateMembershipStatus) endpoint to allow the user to accept the invitation to the team.
80
+
81
+ Please note that to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) Appconda will accept the only redirect URLs under the domains you have added as a platform on the Appconda Console.
82
+
83
+ *
84
+ * @param {string} teamId
85
+ * @param {string[]} roles
86
+ * @param {string} email
87
+ * @param {string} userId
88
+ * @param {string} phone
89
+ * @param {string} url
90
+ * @param {string} name
91
+ * @throws {AppcondaException}
92
+ * @returns {Promise<Models.Membership>}
93
+ */
94
+ createMembership(teamId: string, roles: string[], email?: string, userId?: string, phone?: string, url?: string, name?: string): Promise<Models.Membership>;
95
+ /**
96
+ * Get team membership
97
+ *
98
+ * Get a team member by the membership unique id. All team members have read access for this resource.
99
+ *
100
+ * @param {string} teamId
101
+ * @param {string} membershipId
102
+ * @throws {AppcondaException}
103
+ * @returns {Promise<Models.Membership>}
104
+ */
105
+ getMembership(teamId: string, membershipId: string): Promise<Models.Membership>;
106
+ /**
107
+ * Update membership
108
+ *
109
+ * Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](https://appconda.io/docs/permissions).
110
+
111
+ *
112
+ * @param {string} teamId
113
+ * @param {string} membershipId
114
+ * @param {string[]} roles
115
+ * @throws {AppcondaException}
116
+ * @returns {Promise<Models.Membership>}
117
+ */
118
+ updateMembership(teamId: string, membershipId: string, roles: string[]): Promise<Models.Membership>;
119
+ /**
120
+ * Delete team membership
121
+ *
122
+ * This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.
123
+ *
124
+ * @param {string} teamId
125
+ * @param {string} membershipId
126
+ * @throws {AppcondaException}
127
+ * @returns {Promise<{}>}
128
+ */
129
+ deleteMembership(teamId: string, membershipId: string): Promise<{}>;
130
+ /**
131
+ * Update team membership status
132
+ *
133
+ * Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.
134
+
135
+ If the request is successful, a session for the user is automatically created.
136
+
137
+ *
138
+ * @param {string} teamId
139
+ * @param {string} membershipId
140
+ * @param {string} userId
141
+ * @param {string} secret
142
+ * @throws {AppcondaException}
143
+ * @returns {Promise<Models.Membership>}
144
+ */
145
+ updateMembershipStatus(teamId: string, membershipId: string, userId: string, secret: string): Promise<Models.Membership>;
146
+ /**
147
+ * Get team preferences
148
+ *
149
+ * Get the team&#039;s shared preferences by its unique ID. If a preference doesn&#039;t need to be shared by all team members, prefer storing them in [user preferences](https://appconda.io/docs/references/cloud/client-web/account#getPrefs).
150
+ *
151
+ * @param {string} teamId
152
+ * @throws {AppcondaException}
153
+ * @returns {Promise<Preferences>}
154
+ */
155
+ getPrefs<Preferences extends Models.Preferences>(teamId: string): Promise<Preferences>;
156
+ /**
157
+ * Update preferences
158
+ *
159
+ * Update the team&#039;s preferences by its unique ID. The object you pass is stored as is and replaces any previous value. The maximum allowed prefs size is 64kB and throws an error if exceeded.
160
+ *
161
+ * @param {string} teamId
162
+ * @param {object} prefs
163
+ * @throws {AppcondaException}
164
+ * @returns {Promise<Preferences>}
165
+ */
166
+ updatePrefs<Preferences extends Models.Preferences>(teamId: string, prefs: object): Promise<Preferences>;
167
+ }
@@ -0,0 +1,395 @@
1
+ import { AppcondaException } from '../client';
2
+ export class Teams {
3
+ constructor(client) {
4
+ this.client = client;
5
+ }
6
+ /**
7
+ * List teams
8
+ *
9
+ * Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.
10
+ *
11
+ * @param {string[]} queries
12
+ * @param {string} search
13
+ * @throws {AppcondaException}
14
+ * @returns {Promise<Models.TeamList<Preferences>>}
15
+ */
16
+ async list(queries, search) {
17
+ const apiPath = '/teams';
18
+ const payload = {};
19
+ if (typeof queries !== 'undefined') {
20
+ payload['queries'] = queries;
21
+ }
22
+ if (typeof search !== 'undefined') {
23
+ payload['search'] = search;
24
+ }
25
+ const uri = new URL(this.client.config.endpoint + apiPath);
26
+ const apiHeaders = {
27
+ 'content-type': 'application/json',
28
+ };
29
+ return await this.client.call('get', uri, apiHeaders, payload);
30
+ }
31
+ /**
32
+ * Create team
33
+ *
34
+ * Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.
35
+ *
36
+ * @param {string} teamId
37
+ * @param {string} name
38
+ * @param {string[]} roles
39
+ * @throws {AppcondaException}
40
+ * @returns {Promise<Models.Team<Preferences>>}
41
+ */
42
+ async create(teamId, name, roles) {
43
+ if (typeof teamId === 'undefined') {
44
+ throw new AppcondaException('Missing required parameter: "teamId"');
45
+ }
46
+ if (typeof name === 'undefined') {
47
+ throw new AppcondaException('Missing required parameter: "name"');
48
+ }
49
+ const apiPath = '/teams';
50
+ const payload = {};
51
+ if (typeof teamId !== 'undefined') {
52
+ payload['teamId'] = teamId;
53
+ }
54
+ if (typeof name !== 'undefined') {
55
+ payload['name'] = name;
56
+ }
57
+ if (typeof roles !== 'undefined') {
58
+ payload['roles'] = roles;
59
+ }
60
+ const uri = new URL(this.client.config.endpoint + apiPath);
61
+ const apiHeaders = {
62
+ 'content-type': 'application/json',
63
+ };
64
+ return await this.client.call('post', uri, apiHeaders, payload);
65
+ }
66
+ /**
67
+ * Get team
68
+ *
69
+ * Get a team by its ID. All team members have read access for this resource.
70
+ *
71
+ * @param {string} teamId
72
+ * @throws {AppcondaException}
73
+ * @returns {Promise<Models.Team<Preferences>>}
74
+ */
75
+ async get(teamId) {
76
+ if (typeof teamId === 'undefined') {
77
+ throw new AppcondaException('Missing required parameter: "teamId"');
78
+ }
79
+ const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId);
80
+ const payload = {};
81
+ const uri = new URL(this.client.config.endpoint + apiPath);
82
+ const apiHeaders = {
83
+ 'content-type': 'application/json',
84
+ };
85
+ return await this.client.call('get', uri, apiHeaders, payload);
86
+ }
87
+ /**
88
+ * Update name
89
+ *
90
+ * Update the team&#039;s name by its unique ID.
91
+ *
92
+ * @param {string} teamId
93
+ * @param {string} name
94
+ * @throws {AppcondaException}
95
+ * @returns {Promise<Models.Team<Preferences>>}
96
+ */
97
+ async updateName(teamId, name) {
98
+ if (typeof teamId === 'undefined') {
99
+ throw new AppcondaException('Missing required parameter: "teamId"');
100
+ }
101
+ if (typeof name === 'undefined') {
102
+ throw new AppcondaException('Missing required parameter: "name"');
103
+ }
104
+ const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId);
105
+ const payload = {};
106
+ if (typeof name !== 'undefined') {
107
+ payload['name'] = name;
108
+ }
109
+ const uri = new URL(this.client.config.endpoint + apiPath);
110
+ const apiHeaders = {
111
+ 'content-type': 'application/json',
112
+ };
113
+ return await this.client.call('put', uri, apiHeaders, payload);
114
+ }
115
+ /**
116
+ * Delete team
117
+ *
118
+ * Delete a team using its ID. Only team members with the owner role can delete the team.
119
+ *
120
+ * @param {string} teamId
121
+ * @throws {AppcondaException}
122
+ * @returns {Promise<{}>}
123
+ */
124
+ async delete(teamId) {
125
+ if (typeof teamId === 'undefined') {
126
+ throw new AppcondaException('Missing required parameter: "teamId"');
127
+ }
128
+ const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId);
129
+ const payload = {};
130
+ const uri = new URL(this.client.config.endpoint + apiPath);
131
+ const apiHeaders = {
132
+ 'content-type': 'application/json',
133
+ };
134
+ return await this.client.call('delete', uri, apiHeaders, payload);
135
+ }
136
+ /**
137
+ * List team memberships
138
+ *
139
+ * Use this endpoint to list a team&#039;s members using the team&#039;s ID. All team members have read access to this endpoint.
140
+ *
141
+ * @param {string} teamId
142
+ * @param {string[]} queries
143
+ * @param {string} search
144
+ * @throws {AppcondaException}
145
+ * @returns {Promise<Models.MembershipList>}
146
+ */
147
+ async listMemberships(teamId, queries, search) {
148
+ if (typeof teamId === 'undefined') {
149
+ throw new AppcondaException('Missing required parameter: "teamId"');
150
+ }
151
+ const apiPath = '/teams/{teamId}/memberships'.replace('{teamId}', teamId);
152
+ const payload = {};
153
+ if (typeof queries !== 'undefined') {
154
+ payload['queries'] = queries;
155
+ }
156
+ if (typeof search !== 'undefined') {
157
+ payload['search'] = search;
158
+ }
159
+ const uri = new URL(this.client.config.endpoint + apiPath);
160
+ const apiHeaders = {
161
+ 'content-type': 'application/json',
162
+ };
163
+ return await this.client.call('get', uri, apiHeaders, payload);
164
+ }
165
+ /**
166
+ * Create team membership
167
+ *
168
+ * Invite a new member to join your team. Provide an ID for existing users, or invite unregistered users using an email or phone number. If initiated from a Client SDK, Appconda will send an email or sms with a link to join the team to the invited user, and an account will be created for them if one doesn&#039;t exist. If initiated from a Server SDK, the new member will be added automatically to the team.
169
+
170
+ You only need to provide one of a user ID, email, or phone number. Appconda will prioritize accepting the user ID &gt; email &gt; phone number if you provide more than one of these parameters.
171
+
172
+ Use the `url` parameter to redirect the user from the invitation email to your app. After the user is redirected, use the [Update Team Membership Status](https://appconda.io/docs/references/cloud/client-web/teams#updateMembershipStatus) endpoint to allow the user to accept the invitation to the team.
173
+
174
+ Please note that to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) Appconda will accept the only redirect URLs under the domains you have added as a platform on the Appconda Console.
175
+
176
+ *
177
+ * @param {string} teamId
178
+ * @param {string[]} roles
179
+ * @param {string} email
180
+ * @param {string} userId
181
+ * @param {string} phone
182
+ * @param {string} url
183
+ * @param {string} name
184
+ * @throws {AppcondaException}
185
+ * @returns {Promise<Models.Membership>}
186
+ */
187
+ async createMembership(teamId, roles, email, userId, phone, url, name) {
188
+ if (typeof teamId === 'undefined') {
189
+ throw new AppcondaException('Missing required parameter: "teamId"');
190
+ }
191
+ if (typeof roles === 'undefined') {
192
+ throw new AppcondaException('Missing required parameter: "roles"');
193
+ }
194
+ const apiPath = '/teams/{teamId}/memberships'.replace('{teamId}', teamId);
195
+ const payload = {};
196
+ if (typeof email !== 'undefined') {
197
+ payload['email'] = email;
198
+ }
199
+ if (typeof userId !== 'undefined') {
200
+ payload['userId'] = userId;
201
+ }
202
+ if (typeof phone !== 'undefined') {
203
+ payload['phone'] = phone;
204
+ }
205
+ if (typeof roles !== 'undefined') {
206
+ payload['roles'] = roles;
207
+ }
208
+ if (typeof url !== 'undefined') {
209
+ payload['url'] = url;
210
+ }
211
+ if (typeof name !== 'undefined') {
212
+ payload['name'] = name;
213
+ }
214
+ const uri = new URL(this.client.config.endpoint + apiPath);
215
+ const apiHeaders = {
216
+ 'content-type': 'application/json',
217
+ };
218
+ return await this.client.call('post', uri, apiHeaders, payload);
219
+ }
220
+ /**
221
+ * Get team membership
222
+ *
223
+ * Get a team member by the membership unique id. All team members have read access for this resource.
224
+ *
225
+ * @param {string} teamId
226
+ * @param {string} membershipId
227
+ * @throws {AppcondaException}
228
+ * @returns {Promise<Models.Membership>}
229
+ */
230
+ async getMembership(teamId, membershipId) {
231
+ if (typeof teamId === 'undefined') {
232
+ throw new AppcondaException('Missing required parameter: "teamId"');
233
+ }
234
+ if (typeof membershipId === 'undefined') {
235
+ throw new AppcondaException('Missing required parameter: "membershipId"');
236
+ }
237
+ const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId);
238
+ const payload = {};
239
+ const uri = new URL(this.client.config.endpoint + apiPath);
240
+ const apiHeaders = {
241
+ 'content-type': 'application/json',
242
+ };
243
+ return await this.client.call('get', uri, apiHeaders, payload);
244
+ }
245
+ /**
246
+ * Update membership
247
+ *
248
+ * Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](https://appconda.io/docs/permissions).
249
+
250
+ *
251
+ * @param {string} teamId
252
+ * @param {string} membershipId
253
+ * @param {string[]} roles
254
+ * @throws {AppcondaException}
255
+ * @returns {Promise<Models.Membership>}
256
+ */
257
+ async updateMembership(teamId, membershipId, roles) {
258
+ if (typeof teamId === 'undefined') {
259
+ throw new AppcondaException('Missing required parameter: "teamId"');
260
+ }
261
+ if (typeof membershipId === 'undefined') {
262
+ throw new AppcondaException('Missing required parameter: "membershipId"');
263
+ }
264
+ if (typeof roles === 'undefined') {
265
+ throw new AppcondaException('Missing required parameter: "roles"');
266
+ }
267
+ const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId);
268
+ const payload = {};
269
+ if (typeof roles !== 'undefined') {
270
+ payload['roles'] = roles;
271
+ }
272
+ const uri = new URL(this.client.config.endpoint + apiPath);
273
+ const apiHeaders = {
274
+ 'content-type': 'application/json',
275
+ };
276
+ return await this.client.call('patch', uri, apiHeaders, payload);
277
+ }
278
+ /**
279
+ * Delete team membership
280
+ *
281
+ * This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.
282
+ *
283
+ * @param {string} teamId
284
+ * @param {string} membershipId
285
+ * @throws {AppcondaException}
286
+ * @returns {Promise<{}>}
287
+ */
288
+ async deleteMembership(teamId, membershipId) {
289
+ if (typeof teamId === 'undefined') {
290
+ throw new AppcondaException('Missing required parameter: "teamId"');
291
+ }
292
+ if (typeof membershipId === 'undefined') {
293
+ throw new AppcondaException('Missing required parameter: "membershipId"');
294
+ }
295
+ const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId);
296
+ const payload = {};
297
+ const uri = new URL(this.client.config.endpoint + apiPath);
298
+ const apiHeaders = {
299
+ 'content-type': 'application/json',
300
+ };
301
+ return await this.client.call('delete', uri, apiHeaders, payload);
302
+ }
303
+ /**
304
+ * Update team membership status
305
+ *
306
+ * Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.
307
+
308
+ If the request is successful, a session for the user is automatically created.
309
+
310
+ *
311
+ * @param {string} teamId
312
+ * @param {string} membershipId
313
+ * @param {string} userId
314
+ * @param {string} secret
315
+ * @throws {AppcondaException}
316
+ * @returns {Promise<Models.Membership>}
317
+ */
318
+ async updateMembershipStatus(teamId, membershipId, userId, secret) {
319
+ if (typeof teamId === 'undefined') {
320
+ throw new AppcondaException('Missing required parameter: "teamId"');
321
+ }
322
+ if (typeof membershipId === 'undefined') {
323
+ throw new AppcondaException('Missing required parameter: "membershipId"');
324
+ }
325
+ if (typeof userId === 'undefined') {
326
+ throw new AppcondaException('Missing required parameter: "userId"');
327
+ }
328
+ if (typeof secret === 'undefined') {
329
+ throw new AppcondaException('Missing required parameter: "secret"');
330
+ }
331
+ const apiPath = '/teams/{teamId}/memberships/{membershipId}/status'.replace('{teamId}', teamId).replace('{membershipId}', membershipId);
332
+ const payload = {};
333
+ if (typeof userId !== 'undefined') {
334
+ payload['userId'] = userId;
335
+ }
336
+ if (typeof secret !== 'undefined') {
337
+ payload['secret'] = secret;
338
+ }
339
+ const uri = new URL(this.client.config.endpoint + apiPath);
340
+ const apiHeaders = {
341
+ 'content-type': 'application/json',
342
+ };
343
+ return await this.client.call('patch', uri, apiHeaders, payload);
344
+ }
345
+ /**
346
+ * Get team preferences
347
+ *
348
+ * Get the team&#039;s shared preferences by its unique ID. If a preference doesn&#039;t need to be shared by all team members, prefer storing them in [user preferences](https://appconda.io/docs/references/cloud/client-web/account#getPrefs).
349
+ *
350
+ * @param {string} teamId
351
+ * @throws {AppcondaException}
352
+ * @returns {Promise<Preferences>}
353
+ */
354
+ async getPrefs(teamId) {
355
+ if (typeof teamId === 'undefined') {
356
+ throw new AppcondaException('Missing required parameter: "teamId"');
357
+ }
358
+ const apiPath = '/teams/{teamId}/prefs'.replace('{teamId}', teamId);
359
+ const payload = {};
360
+ const uri = new URL(this.client.config.endpoint + apiPath);
361
+ const apiHeaders = {
362
+ 'content-type': 'application/json',
363
+ };
364
+ return await this.client.call('get', uri, apiHeaders, payload);
365
+ }
366
+ /**
367
+ * Update preferences
368
+ *
369
+ * Update the team&#039;s preferences by its unique ID. The object you pass is stored as is and replaces any previous value. The maximum allowed prefs size is 64kB and throws an error if exceeded.
370
+ *
371
+ * @param {string} teamId
372
+ * @param {object} prefs
373
+ * @throws {AppcondaException}
374
+ * @returns {Promise<Preferences>}
375
+ */
376
+ async updatePrefs(teamId, prefs) {
377
+ if (typeof teamId === 'undefined') {
378
+ throw new AppcondaException('Missing required parameter: "teamId"');
379
+ }
380
+ if (typeof prefs === 'undefined') {
381
+ throw new AppcondaException('Missing required parameter: "prefs"');
382
+ }
383
+ const apiPath = '/teams/{teamId}/prefs'.replace('{teamId}', teamId);
384
+ const payload = {};
385
+ if (typeof prefs !== 'undefined') {
386
+ payload['prefs'] = prefs;
387
+ }
388
+ const uri = new URL(this.client.config.endpoint + apiPath);
389
+ const apiHeaders = {
390
+ 'content-type': 'application/json',
391
+ };
392
+ return await this.client.call('put', uri, apiHeaders, payload);
393
+ }
394
+ }
395
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVhbXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvdGVhbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUF3QyxNQUFNLFdBQVcsQ0FBQztBQUdwRixNQUFNLE9BQU8sS0FBSztJQUdkLFlBQVksTUFBYztRQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsS0FBSyxDQUFDLElBQUksQ0FBeUMsT0FBa0IsRUFBRSxNQUFlO1FBQ2xGLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQztRQUN6QixNQUFNLE9BQU8sR0FBWSxFQUFFLENBQUM7UUFDNUIsSUFBSSxPQUFPLE9BQU8sS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNqQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQ2pDLENBQUM7UUFDRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDL0IsQ0FBQztRQUNELE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUUzRCxNQUFNLFVBQVUsR0FBaUM7WUFDN0MsY0FBYyxFQUFFLGtCQUFrQjtTQUNyQyxDQUFBO1FBRUQsT0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUN6QixLQUFLLEVBQ0wsR0FBRyxFQUNILFVBQVUsRUFDVixPQUFPLENBQ1YsQ0FBQztJQUNOLENBQUM7SUFDRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBeUMsTUFBYyxFQUFFLElBQVksRUFBRSxLQUFnQjtRQUMvRixJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRSxD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LENBQUM7UUFDeEUsQ0FBQztRQUNELElBQUksT0FBTyxLQUFLLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDL0IsTUFBTSxJQUFJLGlCQUFpQixDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDcEUsTUFBTSxPQUFPLEdBQVksRUFBRSxDQUFDO1FBQzVCLElBQUksT0FBTyxLQUFLLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDL0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUM3QixDQUFDO1FBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBRTNELE1BQU0sVUFBVSxHQUFpQztZQUM3QyxjQUFjLEVBQUUsa0JBQWtCO1NBQ3JDLENBQUE7UUFFRCxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3pCLEtBQUssRUFDTCxHQUFHLEVBQ0gsVUFBVSxFQUNWLE9BQU8sQ0FDVixDQUFDO0lBQ04sQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwY29uZGFFeGNlcHRpb24sIENsaWVudCwgdHlwZSBQYXlsb2FkLCBVcGxvYWRQcm9ncmVzcyB9IGZyb20gJy4uL2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7IE1vZGVscyB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBjbGFzcyBUZWFtcyB7XG4gICAgY2xpZW50OiBDbGllbnQ7XG5cbiAgICBjb25zdHJ1Y3RvcihjbGllbnQ6IENsaWVudCkge1xuICAgICAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IHRlYW1zXG4gICAgICpcbiAgICAgKiBHZXQgYSBsaXN0IG9mIGFsbCB0aGUgdGVhbXMgaW4gd2hpY2ggdGhlIGN1cnJlbnQgdXNlciBpcyBhIG1lbWJlci4gWW91IGNhbiB1c2UgdGhlIHBhcmFtZXRlcnMgdG8gZmlsdGVyIHlvdXIgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IHF1ZXJpZXNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoXG4gICAgICogQHRocm93cyB7QXBwY29uZGFFeGNlcHRpb259XG4gICAgICogQHJldHVybnMge1Byb21pc2U8TW9kZWxzLlRlYW1MaXN0PFByZWZlcmVuY2VzPj59XG4gICAgICovXG4gICAgYXN5bmMgbGlzdDxQcmVmZXJlbmNlcyBleHRlbmRzIE1vZGVscy5QcmVmZXJlbmNlcz4ocXVlcmllcz86IHN0cmluZ1tdLCBzZWFyY2g/OiBzdHJpbmcpOiBQcm9taXNlPE1vZGVscy5UZWFtTGlzdDxQcmVmZXJlbmNlcz4+IHtcbiAgICAgICAgY29uc3QgYXBpUGF0aCA9ICcvdGVhbXMnO1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBQYXlsb2FkID0ge307XG4gICAgICAgIGlmICh0eXBlb2YgcXVlcmllcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHBheWxvYWRbJ3F1ZXJpZXMnXSA9IHF1ZXJpZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBzZWFyY2ggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBwYXlsb2FkWydzZWFyY2gnXSA9IHNlYXJjaDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuY2xpZW50LmNvbmZpZy5lbmRwb2ludCArIGFwaVBhdGgpO1xuXG4gICAgICAgIGNvbnN0IGFwaUhlYWRlcnM6IHsgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2xpZW50LmNhbGwoXG4gICAgICAgICAgICAnZ2V0JyxcbiAgICAgICAgICAgIHVyaSxcbiAgICAgICAgICAgIGFwaUhlYWRlcnMsXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgdGVhbVxuICAgICAqXG4gICAgICogQ3JlYXRlIGEgbmV3IHRlYW0uIFRoZSB1c2VyIHdobyBjcmVhdGVzIHRoZSB0ZWFtIHdpbGwgYXV0b21hdGljYWxseSBiZSBhc3NpZ25lZCBhcyB0aGUgb3duZXIgb2YgdGhlIHRlYW0uIE9ubHkgdGhlIHVzZXJzIHdpdGggdGhlIG93bmVyIHJvbGUgY2FuIGludml0ZSBuZXcgbWVtYmVycywgYWRkIG5ldyBvd25lcnMgYW5kIGRlbGV0ZSBvciB1cGRhdGUgdGhlIHRlYW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGVhbUlkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSByb2xlc1xuICAgICAqIEB0aHJvd3Mge0FwcGNvbmRhRXhjZXB0aW9ufVxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPE1vZGVscy5UZWFtPFByZWZlcmVuY2VzPj59XG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlPFByZWZlcmVuY2VzIGV4dGVuZHMgTW9kZWxzLlByZWZlcmVuY2VzPih0ZWFtSWQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCByb2xlcz86IHN0cmluZ1tdKTogUHJvbWlzZTxNb2RlbHMuVGVhbTxQcmVmZXJlbmNlcz4+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB0ZWFtSWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXBwY29uZGFFeGNlcHRpb24oJ01pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVyOiBcInRlYW1JZFwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFwcGNvbmRhRXhjZXB0aW9uKCdNaXNzaW5nIHJlcXVpcmVkIHBhcmFtZXRlcjogXCJuYW1lXCInKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcGlQYXRoID0gJy90ZWFtcyc7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFBheWxvYWQgPSB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiB0ZWFtSWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBwYXlsb2FkWyd0ZWFtSWQnXSA9IHRlYW1JZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG5hbWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBwYXlsb2FkWyduYW1lJ10gPSBuYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygcm9sZXMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBwYXlsb2FkWydyb2xlcyddID0gcm9sZXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLmNsaWVudC5jb25maWcuZW5kcG9pbnQgKyBhcGlQYXRoKTtcblxuICAgICAgICBjb25zdCBhcGlIZWFkZXJzOiB7IFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNsaWVudC5jYWxsKFxuICAgICAgICAgICAgJ3Bvc3QnLFxuICAgICAgICAgICAgdXJpLFxuICAgICAgICAgICAgYXBpSGVhZGVycyxcbiAgICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgICk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0ZWFtXG4gICAgICpcbiAgICAgKiBHZXQgYSB0ZWFtIGJ5IGl0cyBJRC4gQWxsIHRlYW0gbWVtYmVycyBoYXZlIHJlYWQgYWNjZXNzIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRlYW1JZFxuICAgICAqIEB0aHJvd3Mge0FwcGNvbmRhRXhjZXB0aW9ufVxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPE1vZGVscy5UZWFtPFByZWZlcmVuY2VzPj59XG4gICAgICovXG4gICAgYXN5bmMgZ2V0PFByZWZlcmVuY2VzIGV4dGVuZHMgTW9kZWxzLlByZWZlcmVuY2VzPih0ZWFtSWQ6IHN0cmluZyk6IFByb21pc2U8TW9kZWxzLlRlYW08UHJlZmVyZW5jZXM+PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdGVhbUlkID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFwcGNvbmRhRXhjZXB0aW9uKCdNaXNzaW5nIHJlcXVpcmVkIHBhcmFtZXRlcjogXCJ0ZWFtSWRcIicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFwaVBhdGggPSAnL3RlYW1zL3t0ZWFtSWR9Jy5yZXBsYWNlKCd7dGVhbUlkfScsIHRlYW1JZCk7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFBheWxvYWQgPSB7fTtcbiAgICAgICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLmNsaWVudC5jb25maWcuZW5kcG9pbnQgKyBhcGlQYXRoKTtcblxuICAgICAgICBjb25zdCBhcGlIZWFkZXJzOiB7IFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNsaWVudC5jYWxsKFxuICAgICAgICAgICAgJ2dldCcsXG4gICAgICAgICAgICB1cmksXG4gICAgICAgICAgICBhcGlIZWFkZXJzLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVXBkYXRlIG5hbWVcbiAgICAgKlxuICAgICAqIFVwZGF0ZSB0aGUgdGVhbSYjMDM5O3MgbmFtZSBieSBpdHMgdW5pcXVlIElELlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRlYW1JZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAgICogQHRocm93cyB7QXBwY29uZGFFeGNlcHRpb259XG4gICAgICogQHJldHVybnMge1Byb21pc2U8TW9kZWxzLlRlYW08UHJlZmVyZW5jZXM+Pn1cbiAgICAgKi9cbiAgICBhc3luYyB1cGRhdGVOYW1lPFByZWZlcmVuY2VzIGV4dGVuZHMgTW9kZWxzLlByZWZlcmVuY2VzPih0ZWFtSWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUHJvbWlzZTxNb2RlbHMuVGVhbTxQcmVmZXJlbmNlcz4+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB0ZWFtSWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXBwY29uZGFFeGNlcHRpb24oJ01pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVyOiBcInRlYW1JZFwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFwcGNvbmRhRXhjZXB0aW9uKCdNaXNzaW5nIHJlcXVpcmVkIHBhcmFtZXRlcjogXCJuYW1lXCInKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcGlQYXRoID0gJy90ZWFtcy97dGVhbUlkfScucmVwbGFjZSgne3RlYW1JZH0nLCB0ZWFtSWQpO1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBQYXlsb2FkID0ge307XG4gICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHBheWxvYWRbJ25hbWUnXSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLmNsaWVudC5jb25maWcuZW5kcG9pbnQgKyBhcGlQYXRoKTtcblxuICAgICAgICBjb25zdCBhcGlIZWFkZXJzOiB7IFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNsaWVudC5jYWxsKFxuICAgICAgICAgICAgJ3B1dCcsXG4gICAgICAgICAgICB1cmksXG4gICAgICAgICAgICBhcGlIZWFkZXJzLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVsZXRlIHRlYW1cbiAgICAgKlxuICAgICAqIERlbGV0ZSBhIHRlYW0gdXNpbmcgaXRzIElELiBPbmx5IHRlYW0gbWVtYmVycyB3aXRoIHRoZSBvd25lciByb2xlIGNhbiBkZWxldGUgdGhlIHRlYW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGVhbUlkXG4gICAgICogQHRocm93cyB7QXBwY29uZGFFeGNlcHRpb259XG4gICAgICogQHJldHVybnMge1Byb21pc2U8e30+fVxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZSh0ZWFtSWQ6IHN0cmluZyk6IFByb21pc2U8e30+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB0ZWFtSWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXBwY29uZGFFeGNlcHRpb24oJ01pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVyOiBcInRlYW1JZFwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXBpUGF0aCA9ICcvdGVhbXMve3RlYW1JZH0nLnJlcGxhY2UoJ3t0ZWFtSWR9JywgdGVhbUlkKTtcbiAgICAgICAgY29uc3QgcGF5bG9hZDogUGF5bG9hZCA9IHt9O1xuICAgICAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuY2xpZW50LmNvbmZpZy5lbmRwb2ludCArIGFwaVBhdGgpO1xuXG4gICAgICAgIGNvbnN0IGFwaUhlYWRlcnM6IHsgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2xpZW50LmNhbGwoXG4gICAgICAgICAgICAnZGVsZXRlJyxcbiAgICAgICAgICAgIHVyaSxcbiAgICAgICAgICAgIGFwaUhlYWRlcnMsXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBMaXN0IHRlYW0gbWVtYmVyc2hpcHNcbiAgICAgKlxuICAgICAqIFVzZSB0aGlzIGVuZHBvaW50IHRvIGxpc3QgYSB0ZWFtJiMwMzk7cyBtZW1iZXJzIHVzaW5nIHRoZSB0ZWFtJiMwMzk7cyBJRC4gQWxsIHRlYW0gbWVtYmVycyBoYXZlIHJlYWQgYWNjZXNzIHRvIHRoaXMgZW5kcG9pbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGVhbUlkXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gcXVlcmllc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hcbiAgICAgKiBAdGhyb3dzIHtBcHBjb25kYUV4Y2VwdGlvbn1cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNb2RlbHMuTWVtYmVyc2hpcExpc3Q+fVxuICAgICAqL1xuICAgIGFzeW5jIGxpc3RNZW1iZXJzaGlwcyh0ZWFtSWQ6IHN0cmluZywgcXVlcmllcz86IHN0cmluZ1tdLCBzZWFyY2g/OiBzdHJpbmcpOiBQcm9taXNlPE1vZGVscy5NZW1iZXJzaGlwTGlzdD4ge1xuICAgICAgICBpZiAodHlwZW9mIHRlYW1JZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBcHBjb25kYUV4Y2VwdGlvbignTWlzc2luZyByZXF1aXJlZCBwYXJhbWV0ZXI6IFwidGVhbUlkXCInKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcGlQYXRoID0gJy90ZWFtcy97dGVhbUlkfS9tZW1iZXJzaGlwcycucmVwbGFjZSgne3RlYW1JZH0nLCB0ZWFtSWQpO1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBQYXlsb2FkID0ge307XG4gICAgICAgIGlmICh0eXBlb2YgcXVlcmllcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHBheWxvYWRbJ3F1ZXJpZXMnXSA9IHF1ZXJpZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBzZWFyY2ggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBwYXlsb2FkWydzZWFyY2gnXSA9IHNlYXJjaDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuY2xpZW50LmNvbmZpZy5lbmRwb2ludCArIGFwaVBhdGgpO1xuXG4gICAgICAgIGNvbnN0IGFwaUhlYWRlcnM6IHsgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2xpZW50LmNhbGwoXG4gICAgICAgICAgICAnZ2V0JyxcbiAgICAgICAgICAgIHVyaSxcbiAgICAgICAgICAgIGFwaUhlYWRlcnMsXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgdGVhbSBtZW1iZXJzaGlwXG4gICAgICpcbiAgICAgKiBJbnZpdGUgYSBuZXcgbWVtYmVyIHRvIGpvaW4geW91ciB0ZWFtLiBQcm92aWRlIGFuIElEIGZvciBleGlzdGluZyB1c2Vycywgb3IgaW52aXRlIHVucmVnaXN0ZXJlZCB1c2VycyB1c2luZyBhbiBlbWFpbCBvciBwaG9uZSBudW1iZXIuIElmIGluaXRpYXRlZCBmcm9tIGEgQ2xpZW50IFNESywgQXBwY29uZGEgd2lsbCBzZW5kIGFuIGVtYWlsIG9yIHNtcyB3aXRoIGEgbGluayB0byBqb2luIHRoZSB0ZWFtIHRvIHRoZSBpbnZpdGVkIHVzZXIsIGFuZCBhbiBhY2NvdW50IHdpbGwgYmUgY3JlYXRlZCBmb3IgdGhlbSBpZiBvbmUgZG9lc24mIzAzOTt0IGV4aXN0LiBJZiBpbml0aWF0ZWQgZnJvbSBhIFNlcnZlciBTREssIHRoZSBuZXcgbWVtYmVyIHdpbGwgYmUgYWRkZWQgYXV0b21hdGljYWxseSB0byB0aGUgdGVhbS5cblxuWW91IG9ubHkgbmVlZCB0byBwcm92aWRlIG9uZSBvZiBhIHVzZXIgSUQsIGVtYWlsLCBvciBwaG9uZSBudW1iZXIuIEFwcGNvbmRhIHdpbGwgcHJpb3JpdGl6ZSBhY2NlcHRpbmcgdGhlIHVzZXIgSUQgJmd0OyBlbWFpbCAmZ3Q7IHBob25lIG51bWJlciBpZiB5b3UgcHJvdmlkZSBtb3JlIHRoYW4gb25lIG9mIHRoZXNlIHBhcmFtZXRlcnMuXG5cblVzZSB0aGUgYHVybGAgcGFyYW1ldGVyIHRvIHJlZGlyZWN0IHRoZSB1c2VyIGZyb20gdGhlIGludml0YXRpb24gZW1haWwgdG8geW91ciBhcHAuIEFmdGVyIHRoZSB1c2VyIGlzIHJlZGlyZWN0ZWQsIHVzZSB0aGUgW1VwZGF0ZSBUZWFtIE1lbWJlcnNoaXAgU3RhdHVzXShodHRwczovL2FwcGNvbmRhLmlvL2RvY3MvcmVmZXJlbmNlcy9jbG91ZC9jbGllbnQtd2ViL3RlYW1zI3VwZGF0ZU1lbWJlcnNoaXBTdGF0dXMpIGVuZHBvaW50IHRvIGFsbG93IHRoZSB1c2VyIHRvIGFjY2VwdCB0aGUgaW52aXRhdGlvbiB0byB0aGUgdGVhbS4gXG5cblBsZWFzZSBub3RlIHRoYXQgdG8gYXZvaWQgYSBbUmVkaXJlY3QgQXR0YWNrXShodHRwczovL2dpdGh1Yi5jb20vT1dBU1AvQ2hlYXRTaGVldFNlcmllcy9ibG9iL21hc3Rlci9jaGVhdHNoZWV0cy9VbnZhbGlkYXRlZF9SZWRpcmVjdHNfYW5kX0ZvcndhcmRzX0NoZWF0X1NoZWV0Lm1kKSBBcHBjb25kYSB3aWxsIGFjY2VwdCB0aGUgb25seSByZWRpcmVjdCBVUkxzIHVuZGVyIHRoZSBkb21haW5zIHlvdSBoYXZlIGFkZGVkIGFzIGEgcGxhdGZvcm0gb24gdGhlIEFwcGNvbmRhIENvbnNvbGUuXG5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZWFtSWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSByb2xlc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGhvbmVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAdGhyb3dzIHtBcHBjb25kYUV4Y2VwdGlvbn1cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNb2RlbHMuTWVtYmVyc2hpcD59XG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlTWVtYmVyc2hpcCh0ZWFtSWQ6IHN0cmluZywgcm9sZXM6IHN0cmluZ1tdLCBlbWFpbD86IHN0cmluZywgdXNlcklkPzogc3RyaW5nLCBwaG9uZT86IHN0cmluZywgdXJsPzogc3RyaW5nLCBuYW1lPzogc3RyaW5nKTogUHJvbWlzZTxNb2RlbHMuTWVtYmVyc2hpcD4ge1xuICAgICAgICBpZiAodHlwZW9mIHRlYW1JZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBcHBjb25kYUV4Y2VwdGlvbignTWlzc2luZyByZXF1aXJlZCBwYXJhbWV0ZXI6IFwidGVhbUlkXCInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJvbGVzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFwcGNvbmRhRXhjZXB0aW9uKCdNaXNzaW5nIHJlcXVpcmVkIHBhcmFtZXRlcjogXCJyb2xlc1wiJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXBpUGF0aCA9ICcvdGVhbXMve3RlYW1JZH0vbWVtYmVyc2hpcHMnLnJlcGxhY2UoJ3t0ZWFtSWR9JywgdGVhbUlkKTtcbiAgICAgICAgY29uc3QgcGF5bG9hZDogUGF5bG9hZCA9IHt9O1xuICAgICAgICBpZiAodHlwZW9mIGVtYWlsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcGF5bG9hZFsnZW1haWwnXSA9IGVtYWlsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdXNlcklkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcGF5bG9hZFsndXNlcklkJ10gPSB1c2VySWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBwaG9uZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHBheWxvYWRbJ3Bob25lJ10gPSBwaG9uZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJvbGVzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcGF5bG9hZFsncm9sZXMnXSA9IHJvbGVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdXJsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcGF5bG9hZFsndXJsJ10gPSB1cmw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcGF5bG9hZFsnbmFtZSddID0gbmFtZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuY2xpZW50LmNvbmZpZy5lbmRwb2ludCArIGFwaVBhdGgpO1xuXG4gICAgICAgIGNvbnN0IGFwaUhlYWRlcnM6IHsgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2xpZW50LmNhbGwoXG4gICAgICAgICAgICAncG9zdCcsXG4gICAgICAgICAgICB1cmksXG4gICAgICAgICAgICBhcGlIZWFkZXJzLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRlYW0gbWVtYmVyc2hpcFxuICAgICAqXG4gICAgICogR2V0IGEgdGVhbSBtZW1iZXIgYnkgdGhlIG1lbWJlcnNoaXAgdW5pcXVlIGlkLiBBbGwgdGVhbSBtZW1iZXJzIGhhdmUgcmVhZCBhY2Nlc3MgZm9yIHRoaXMgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGVhbUlkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1lbWJlcnNoaXBJZFxuICAgICAqIEB0aHJvd3Mge0FwcGNvbmRhRXhjZXB0aW9ufVxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPE1vZGVscy5NZW1iZXJzaGlwPn1cbiAgICAgKi9cbiAgICBhc3luYyBnZXRNZW1iZXJzaGlwKHRlYW1JZDogc3RyaW5nLCBtZW1iZXJzaGlwSWQ6IHN0cmluZyk6IFByb21pc2U8TW9kZWxzLk1lbWJlcnNoaXA+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB0ZWFtSWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXBwY29uZGFFeGNlcHRpb24oJ01pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVyOiBcInRlYW1JZFwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBtZW1iZXJzaGlwSWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXBwY29uZGFFeGNlcHRpb24oJ01pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVyOiBcIm1lbWJlcnNoaXBJZFwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXBpUGF0aCA9ICcvdGVhbXMve3RlYW1JZH0vbWVtYmVyc2hpcHMve21lbWJlcnNoaXBJZH0nLnJlcGxhY2UoJ3t0ZWFtSWR9JywgdGVhbUlkKS5yZXBsYWNlKCd7bWVtYmVyc2hpcElkfScsIG1lbWJlcnNoaXBJZCk7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFBheWxvYWQgPSB7fTtcbiAgICAgICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLmNsaWVudC5jb25maWcuZW5kcG9pbnQgKyBhcGlQYXRoKTtcblxuICAgICAgICBjb25zdCBhcGlIZWFkZXJzOiB7IFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNsaWVudC5jYWxsKFxuICAgICAgICAgICAgJ2dldCcsXG4gICAgICAgICAgICB1cmksXG4gICAgICAgICAgICBhcGlIZWFkZXJzLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVXBkYXRlIG1lbWJlcnNoaXBcbiAgICAgKlxuICAgICAqIE1vZGlmeSB0aGUgcm9sZXMgb2YgYSB0ZWFtIG1lbWJlci4gT25seSB0ZWFtIG1lbWJlcnMgd2l0aCB0aGUgb3duZXIgcm9sZSBoYXZlIGFjY2VzcyB0byB0aGlzIGVuZHBvaW50LiBMZWFybiBtb3JlIGFib3V0IFtyb2xlcyBhbmQgcGVybWlzc2lvbnNdKGh0dHBzOi8vYXBwY29uZGEuaW8vZG9jcy9wZXJtaXNzaW9ucykuXG5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZWFtSWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWVtYmVyc2hpcElkXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gcm9sZXNcbiAgICAgKiBAdGhyb3dzIHtBcHBjb25kYUV4Y2VwdGlvbn1cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNb2RlbHMuTWVtYmVyc2hpcD59XG4gICAgICovXG4gICAgYXN5bmMgdXBkYXRlTWVtYmVyc2hpcCh0ZWFtSWQ6IHN0cmluZywgbWVtYmVyc2hpcElkOiBzdHJpbmcsIHJvbGVzOiBzdHJpbmdbXSk6IFByb21pc2U8TW9kZWxzLk1lbWJlcnNoaXA+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB0ZWFtSWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXBwY29uZGFFeGNlcHRpb24oJ01pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVyOiBcInRlYW1JZFwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBtZW1iZXJzaGlwSWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXBwY29uZGFFeGNlcHRpb24oJ01pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVyOiBcIm1lbWJlcnNoaXBJZFwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiByb2xlcyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBcHBjb25kYUV4Y2VwdGlvbignTWlzc2luZyByZXF1aXJlZCBwYXJhbWV0ZXI6IFwicm9sZXNcIicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFwaVBhdGggPSAnL3RlYW1zL3t0ZWFtSWR9L21lbWJlcnNoaXBzL3ttZW1iZXJzaGlwSWR9Jy5yZXBsYWNlKCd7dGVhbUlkfScsIHRlYW1JZCkucmVwbGFjZSgne21lbWJlcnNoaXBJZH0nLCBtZW1iZXJzaGlwSWQpO1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBQYXlsb2FkID0ge307XG4gICAgICAgIGlmICh0eXBlb2Ygcm9sZXMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBwYXlsb2FkWydyb2xlcyddID0gcm9sZXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLmNsaWVudC5jb25maWcuZW5kcG9pbnQgKyBhcGlQYXRoKTtcblxuICAgICAgICBjb25zdCBhcGlIZWFkZXJzOiB7IFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNsaWVudC5jYWxsKFxuICAgICAgICAgICAgJ3BhdGNoJyxcbiAgICAgICAgICAgIHVyaSxcbiAgICAgICAgICAgIGFwaUhlYWRlcnMsXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWxldGUgdGVhbSBtZW1iZXJzaGlwXG4gICAgICpcbiAgICAgKiBUaGlzIGVuZHBvaW50IGFsbG93cyBhIHVzZXIgdG8gbGVhdmUgYSB0ZWFtIG9yIGZvciBhIHRlYW0gb3duZXIgdG8gZGVsZXRlIHRoZSBtZW1iZXJzaGlwIG9mIGFueSBvdGhlciB0ZWFtIG1lbWJlci4gWW91IGNhbiBhbHNvIHVzZSB0aGlzIGVuZHBvaW50IHRvIGRlbGV0ZSBhIHVzZXIgbWVtYmVyc2hpcCBldmVuIGlmIGl0IGlzIG5vdCBhY2NlcHRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZWFtSWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWVtYmVyc2hpcElkXG4gICAgICogQHRocm93cyB7QXBwY29uZGFFeGNlcHRpb259XG4gICAgICogQHJldHVybnMge1Byb21pc2U8e30+fVxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZU1lbWJlcnNoaXAodGVhbUlkOiBzdHJpbmcsIG1lbWJlcnNoaXBJZDogc3RyaW5nKTogUHJvbWlzZTx7fT4ge1xuICAgICAgICBpZiAodHlwZW9mIHRlYW1JZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBcHBjb25kYUV4Y2VwdGlvbignTWlzc2luZyByZXF1aXJlZCBwYXJhbWV0ZXI6IFwidGVhbUlkXCInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG1lbWJlcnNoaXBJZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBcHBjb25kYUV4Y2VwdGlvbignTWlzc2luZyByZXF1aXJlZCBwYXJhbWV0ZXI6IFwibWVtYmVyc2hpcElkXCInKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcGlQYXRoID0gJy90ZWFtcy97dGVhbUlkfS9tZW1iZXJzaGlwcy97bWVtYmVyc2hpcElkfScucmVwbGFjZSgne3RlYW1JZH0nLCB0ZWFtSWQpLnJlcGxhY2UoJ3ttZW1iZXJzaGlwSWR9JywgbWVtYmVyc2hpcElkKTtcbiAgICAgICAgY29uc3QgcGF5bG9hZDogUGF5bG9hZCA9IHt9O1xuICAgICAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuY2xpZW50LmNvbmZpZy5lbmRwb2ludCArIGFwaVBhdGgpO1xuXG4gICAgICAgIGNvbnN0IGFwaUhlYWRlcnM6IHsgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2xpZW50LmNhbGwoXG4gICAgICAgICAgICAnZGVsZXRlJyxcbiAgICAgICAgICAgIHVyaSxcbiAgICAgICAgICAgIGFwaUhlYWRlcnMsXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgdGVhbSBtZW1iZXJzaGlwIHN0YXR1c1xuICAgICAqXG4gICAgICogVXNlIHRoaXMgZW5kcG9pbnQgdG8gYWxsb3cgYSB1c2VyIHRvIGFjY2VwdCBhbiBpbnZpdGF0aW9uIHRvIGpvaW4gYSB0ZWFtIGFmdGVyIGJlaW5nIHJlZGlyZWN0ZWQgYmFjayB0byB5b3VyIGFwcCBmcm9tIHRoZSBpbnZpdGF0aW9uIGVtYWlsIHJlY2VpdmVkIGJ5IHRoZSB1c2VyLlxuXG5JZiB0aGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsLCBhIHNlc3Npb24gZm9yIHRoZSB1c2VyIGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZC5cblxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRlYW1JZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZW1iZXJzaGlwSWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlY3JldFxuICAgICAqIEB0aHJvd3Mge0FwcGNvbmRhRXhjZXB0aW9ufVxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPE1vZGVscy5NZW1iZXJzaGlwPn1cbiAgICAgKi9cbiAgICBhc3luYyB1cGRhdGVNZW1iZXJzaGlwU3RhdHVzKHRlYW1JZDogc3RyaW5nLCBtZW1iZXJzaGlwSWQ6IHN0cmluZywgdXNlcklkOiBzdHJpbmcsIHNlY3JldDogc3RyaW5nKTogUHJvbWlzZTxNb2RlbHMuTWVtYmVyc2hpcD4ge1xuICAgICAgICBpZiAodHlwZW9mIHRlYW1JZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBcHBjb25kYUV4Y2VwdGlvbignTWlzc2luZyByZXF1aXJlZCBwYXJhbWV0ZXI6IFwidGVhbUlkXCInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG1lbWJlcnNoaXBJZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBcHBjb25kYUV4Y2VwdGlvbignTWlzc2luZyByZXF1aXJlZCBwYXJhbWV0ZXI6IFwibWVtYmVyc2hpcElkXCInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHVzZXJJZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBcHBjb25kYUV4Y2VwdGlvbignTWlzc2luZyByZXF1aXJlZCBwYXJhbWV0ZXI6IFwidXNlcklkXCInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHNlY3JldCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBcHBjb25kYUV4Y2VwdGlvbignTWlzc2luZyByZXF1aXJlZCBwYXJhbWV0ZXI6IFwic2VjcmV0XCInKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcGlQYXRoID0gJy90ZWFtcy97dGVhbUlkfS9tZW1iZXJzaGlwcy97bWVtYmVyc2hpcElkfS9zdGF0dXMnLnJlcGxhY2UoJ3t0ZWFtSWR9JywgdGVhbUlkKS5yZXBsYWNlKCd7bWVtYmVyc2hpcElkfScsIG1lbWJlcnNoaXBJZCk7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFBheWxvYWQgPSB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiB1c2VySWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBwYXlsb2FkWyd1c2VySWQnXSA9IHVzZXJJZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHNlY3JldCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHBheWxvYWRbJ3NlY3JldCddID0gc2VjcmV0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5jbGllbnQuY29uZmlnLmVuZHBvaW50ICsgYXBpUGF0aCk7XG5cbiAgICAgICAgY29uc3QgYXBpSGVhZGVyczogeyBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jbGllbnQuY2FsbChcbiAgICAgICAgICAgICdwYXRjaCcsXG4gICAgICAgICAgICB1cmksXG4gICAgICAgICAgICBhcGlIZWFkZXJzLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRlYW0gcHJlZmVyZW5jZXNcbiAgICAgKlxuICAgICAqIEdldCB0aGUgdGVhbSYjMDM5O3Mgc2hhcmVkIHByZWZlcmVuY2VzIGJ5IGl0cyB1bmlxdWUgSUQuIElmIGEgcHJlZmVyZW5jZSBkb2VzbiYjMDM5O3QgbmVlZCB0byBiZSBzaGFyZWQgYnkgYWxsIHRlYW0gbWVtYmVycywgcHJlZmVyIHN0b3JpbmcgdGhlbSBpbiBbdXNlciBwcmVmZXJlbmNlc10oaHR0cHM6Ly9hcHBjb25kYS5pby9kb2NzL3JlZmVyZW5jZXMvY2xvdWQvY2xpZW50LXdlYi9hY2NvdW50I2dldFByZWZzKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZWFtSWRcbiAgICAgKiBAdGhyb3dzIHtBcHBjb25kYUV4Y2VwdGlvbn1cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxQcmVmZXJlbmNlcz59XG4gICAgICovXG4gICAgYXN5bmMgZ2V0UHJlZnM8UHJlZmVyZW5jZXMgZXh0ZW5kcyBNb2RlbHMuUHJlZmVyZW5jZXM+KHRlYW1JZDogc3RyaW5nKTogUHJvbWlzZTxQcmVmZXJlbmNlcz4ge1xuICAgICAgICBpZiAodHlwZW9mIHRlYW1JZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBcHBjb25kYUV4Y2VwdGlvbignTWlzc2luZyByZXF1aXJlZCBwYXJhbWV0ZXI6IFwidGVhbUlkXCInKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcGlQYXRoID0gJy90ZWFtcy97dGVhbUlkfS9wcmVmcycucmVwbGFjZSgne3RlYW1JZH0nLCB0ZWFtSWQpO1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBQYXlsb2FkID0ge307XG4gICAgICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5jbGllbnQuY29uZmlnLmVuZHBvaW50ICsgYXBpUGF0aCk7XG5cbiAgICAgICAgY29uc3QgYXBpSGVhZGVyczogeyBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jbGllbnQuY2FsbChcbiAgICAgICAgICAgICdnZXQnLFxuICAgICAgICAgICAgdXJpLFxuICAgICAgICAgICAgYXBpSGVhZGVycyxcbiAgICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgICk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBwcmVmZXJlbmNlc1xuICAgICAqXG4gICAgICogVXBkYXRlIHRoZSB0ZWFtJiMwMzk7cyBwcmVmZXJlbmNlcyBieSBpdHMgdW5pcXVlIElELiBUaGUgb2JqZWN0IHlvdSBwYXNzIGlzIHN0b3JlZCBhcyBpcyBhbmQgcmVwbGFjZXMgYW55IHByZXZpb3VzIHZhbHVlLiBUaGUgbWF4aW11bSBhbGxvd2VkIHByZWZzIHNpemUgaXMgNjRrQiBhbmQgdGhyb3dzIGFuIGVycm9yIGlmIGV4Y2VlZGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRlYW1JZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwcmVmc1xuICAgICAqIEB0aHJvd3Mge0FwcGNvbmRhRXhjZXB0aW9ufVxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPFByZWZlcmVuY2VzPn1cbiAgICAgKi9cbiAgICBhc3luYyB1cGRhdGVQcmVmczxQcmVmZXJlbmNlcyBleHRlbmRzIE1vZGVscy5QcmVmZXJlbmNlcz4odGVhbUlkOiBzdHJpbmcsIHByZWZzOiBvYmplY3QpOiBQcm9taXNlPFByZWZlcmVuY2VzPiB7XG4gICAgICAgIGlmICh0eXBlb2YgdGVhbUlkID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFwcGNvbmRhRXhjZXB0aW9uKCdNaXNzaW5nIHJlcXVpcmVkIHBhcmFtZXRlcjogXCJ0ZWFtSWRcIicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgcHJlZnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXBwY29uZGFFeGNlcHRpb24oJ01pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVyOiBcInByZWZzXCInKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcGlQYXRoID0gJy90ZWFtcy97dGVhbUlkfS9wcmVmcycucmVwbGFjZSgne3RlYW1JZH0nLCB0ZWFtSWQpO1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBQYXlsb2FkID0ge307XG4gICAgICAgIGlmICh0eXBlb2YgcHJlZnMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBwYXlsb2FkWydwcmVmcyddID0gcHJlZnM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLmNsaWVudC5jb25maWcuZW5kcG9pbnQgKyBhcGlQYXRoKTtcblxuICAgICAgICBjb25zdCBhcGlIZWFkZXJzOiB7IFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNsaWVudC5jYWxsKFxuICAgICAgICAgICAgJ3B1dCcsXG4gICAgICAgICAgICB1cmksXG4gICAgICAgICAgICBhcGlIZWFkZXJzLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,12 @@
1
+ import { Client } from "../client";
2
+ export declare class TenantSubscription {
3
+ client: Client;
4
+ constructor(client: Client);
5
+ getOrPersistTenantSubscription(tenantId: string): Promise<ArrayBuffer>;
6
+ getTenantSubscriptions(): Promise<any>;
7
+ createTenantSubscription(tenantId: string, stripeCustomerId: string): Promise<{
8
+ id: string;
9
+ tenantId: string;
10
+ stripeCustomerId: string;
11
+ }>;
12
+ }