@cloudbase/js-sdk 3.3.14-beta.2 → 3.3.14-beta.4

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 (717) hide show
  1. package/dist/index.cjs.js +1 -1
  2. package/miniprogram_dist/index.js +1 -1
  3. package/node_modules/@cloudbase/ai/.eslintrc.js +15 -0
  4. package/node_modules/@cloudbase/ai/dist/cjs/AI.d.ts +27 -0
  5. package/node_modules/@cloudbase/ai/dist/cjs/AI.js +224 -0
  6. package/node_modules/@cloudbase/ai/dist/cjs/bot/index.d.ts +41 -0
  7. package/node_modules/@cloudbase/ai/dist/cjs/bot/index.js +376 -0
  8. package/node_modules/@cloudbase/ai/dist/cjs/bot/types.d.ts +144 -0
  9. package/node_modules/@cloudbase/ai/dist/cjs/bot/types.js +3 -0
  10. package/node_modules/@cloudbase/ai/dist/cjs/eventsource_parser/index.d.ts +2 -0
  11. package/node_modules/@cloudbase/ai/dist/cjs/eventsource_parser/index.js +6 -0
  12. package/node_modules/@cloudbase/ai/dist/cjs/eventsource_parser/parse.d.ts +2 -0
  13. package/node_modules/@cloudbase/ai/dist/cjs/eventsource_parser/parse.js +126 -0
  14. package/node_modules/@cloudbase/ai/dist/cjs/eventsource_parser/stream.d.ts +5 -0
  15. package/node_modules/@cloudbase/ai/dist/cjs/eventsource_parser/stream.js +40 -0
  16. package/node_modules/@cloudbase/ai/dist/cjs/eventsource_parser/types.d.ts +16 -0
  17. package/node_modules/@cloudbase/ai/dist/cjs/eventsource_parser/types.js +3 -0
  18. package/node_modules/@cloudbase/ai/dist/cjs/index.d.ts +40 -0
  19. package/node_modules/@cloudbase/ai/dist/cjs/index.js +187 -0
  20. package/node_modules/@cloudbase/ai/dist/cjs/models/Ark/index.d.ts +10 -0
  21. package/node_modules/@cloudbase/ai/dist/cjs/models/Ark/index.js +130 -0
  22. package/node_modules/@cloudbase/ai/dist/cjs/models/Ark/type.d.ts +71 -0
  23. package/node_modules/@cloudbase/ai/dist/cjs/models/Ark/type.js +3 -0
  24. package/node_modules/@cloudbase/ai/dist/cjs/models/DashScope/index.d.ts +10 -0
  25. package/node_modules/@cloudbase/ai/dist/cjs/models/DashScope/index.js +130 -0
  26. package/node_modules/@cloudbase/ai/dist/cjs/models/DashScope/type.d.ts +74 -0
  27. package/node_modules/@cloudbase/ai/dist/cjs/models/DashScope/type.js +3 -0
  28. package/node_modules/@cloudbase/ai/dist/cjs/models/DeepSeek/index.d.ts +10 -0
  29. package/node_modules/@cloudbase/ai/dist/cjs/models/DeepSeek/index.js +126 -0
  30. package/node_modules/@cloudbase/ai/dist/cjs/models/Default/index.d.ts +10 -0
  31. package/node_modules/@cloudbase/ai/dist/cjs/models/Default/index.js +122 -0
  32. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuan/index.d.ts +10 -0
  33. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuan/index.js +135 -0
  34. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuan/type.d.ts +74 -0
  35. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuan/type.js +3 -0
  36. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuan/util.d.ts +4 -0
  37. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuan/util.js +56 -0
  38. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuanBeta/index.d.ts +10 -0
  39. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuanBeta/index.js +127 -0
  40. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuanExp/index.d.ts +10 -0
  41. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuanExp/index.js +125 -0
  42. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuanOpen/index.d.ts +10 -0
  43. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuanOpen/index.js +127 -0
  44. package/node_modules/@cloudbase/ai/dist/cjs/models/Moonshot/index.d.ts +10 -0
  45. package/node_modules/@cloudbase/ai/dist/cjs/models/Moonshot/index.js +130 -0
  46. package/node_modules/@cloudbase/ai/dist/cjs/models/Moonshot/type.d.ts +85 -0
  47. package/node_modules/@cloudbase/ai/dist/cjs/models/Moonshot/type.js +3 -0
  48. package/node_modules/@cloudbase/ai/dist/cjs/models/Yi/index.d.ts +10 -0
  49. package/node_modules/@cloudbase/ai/dist/cjs/models/Yi/index.js +133 -0
  50. package/node_modules/@cloudbase/ai/dist/cjs/models/Yi/type.d.ts +75 -0
  51. package/node_modules/@cloudbase/ai/dist/cjs/models/Yi/type.js +3 -0
  52. package/node_modules/@cloudbase/ai/dist/cjs/models/ZhiPu/index.d.ts +10 -0
  53. package/node_modules/@cloudbase/ai/dist/cjs/models/ZhiPu/index.js +139 -0
  54. package/node_modules/@cloudbase/ai/dist/cjs/models/ZhiPu/type.d.ts +71 -0
  55. package/node_modules/@cloudbase/ai/dist/cjs/models/ZhiPu/type.js +3 -0
  56. package/node_modules/@cloudbase/ai/dist/cjs/models/image-model.d.ts +18 -0
  57. package/node_modules/@cloudbase/ai/dist/cjs/models/image-model.js +85 -0
  58. package/node_modules/@cloudbase/ai/dist/cjs/models/index.d.ts +26 -0
  59. package/node_modules/@cloudbase/ai/dist/cjs/models/index.js +42 -0
  60. package/node_modules/@cloudbase/ai/dist/cjs/models/model.d.ts +40 -0
  61. package/node_modules/@cloudbase/ai/dist/cjs/models/model.js +481 -0
  62. package/node_modules/@cloudbase/ai/dist/cjs/type.d.ts +190 -0
  63. package/node_modules/@cloudbase/ai/dist/cjs/type.js +10 -0
  64. package/node_modules/@cloudbase/ai/dist/cjs/utils.d.ts +38 -0
  65. package/node_modules/@cloudbase/ai/dist/cjs/utils.js +263 -0
  66. package/node_modules/@cloudbase/ai/dist/esm/AI.d.ts +27 -0
  67. package/node_modules/@cloudbase/ai/dist/esm/AI.js +198 -0
  68. package/node_modules/@cloudbase/ai/dist/esm/bot/index.d.ts +41 -0
  69. package/node_modules/@cloudbase/ai/dist/esm/bot/index.js +373 -0
  70. package/node_modules/@cloudbase/ai/dist/esm/bot/types.d.ts +144 -0
  71. package/node_modules/@cloudbase/ai/dist/esm/bot/types.js +2 -0
  72. package/node_modules/@cloudbase/ai/dist/esm/eventsource_parser/index.d.ts +2 -0
  73. package/node_modules/@cloudbase/ai/dist/esm/eventsource_parser/index.js +2 -0
  74. package/node_modules/@cloudbase/ai/dist/esm/eventsource_parser/parse.d.ts +2 -0
  75. package/node_modules/@cloudbase/ai/dist/esm/eventsource_parser/parse.js +122 -0
  76. package/node_modules/@cloudbase/ai/dist/esm/eventsource_parser/stream.d.ts +5 -0
  77. package/node_modules/@cloudbase/ai/dist/esm/eventsource_parser/stream.js +37 -0
  78. package/node_modules/@cloudbase/ai/dist/esm/eventsource_parser/types.d.ts +16 -0
  79. package/node_modules/@cloudbase/ai/dist/esm/eventsource_parser/types.js +2 -0
  80. package/node_modules/@cloudbase/ai/dist/esm/index.d.ts +40 -0
  81. package/node_modules/@cloudbase/ai/dist/esm/index.js +152 -0
  82. package/node_modules/@cloudbase/ai/dist/esm/models/Ark/index.d.ts +10 -0
  83. package/node_modules/@cloudbase/ai/dist/esm/models/Ark/index.js +127 -0
  84. package/node_modules/@cloudbase/ai/dist/esm/models/Ark/type.d.ts +71 -0
  85. package/node_modules/@cloudbase/ai/dist/esm/models/Ark/type.js +2 -0
  86. package/node_modules/@cloudbase/ai/dist/esm/models/DashScope/index.d.ts +10 -0
  87. package/node_modules/@cloudbase/ai/dist/esm/models/DashScope/index.js +127 -0
  88. package/node_modules/@cloudbase/ai/dist/esm/models/DashScope/type.d.ts +74 -0
  89. package/node_modules/@cloudbase/ai/dist/esm/models/DashScope/type.js +2 -0
  90. package/node_modules/@cloudbase/ai/dist/esm/models/DeepSeek/index.d.ts +10 -0
  91. package/node_modules/@cloudbase/ai/dist/esm/models/DeepSeek/index.js +123 -0
  92. package/node_modules/@cloudbase/ai/dist/esm/models/Default/index.d.ts +10 -0
  93. package/node_modules/@cloudbase/ai/dist/esm/models/Default/index.js +119 -0
  94. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuan/index.d.ts +10 -0
  95. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuan/index.js +132 -0
  96. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuan/type.d.ts +74 -0
  97. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuan/type.js +2 -0
  98. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuan/util.d.ts +4 -0
  99. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuan/util.js +51 -0
  100. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuanBeta/index.d.ts +10 -0
  101. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuanBeta/index.js +124 -0
  102. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuanExp/index.d.ts +10 -0
  103. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuanExp/index.js +122 -0
  104. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuanOpen/index.d.ts +10 -0
  105. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuanOpen/index.js +124 -0
  106. package/node_modules/@cloudbase/ai/dist/esm/models/Moonshot/index.d.ts +10 -0
  107. package/node_modules/@cloudbase/ai/dist/esm/models/Moonshot/index.js +127 -0
  108. package/node_modules/@cloudbase/ai/dist/esm/models/Moonshot/type.d.ts +85 -0
  109. package/node_modules/@cloudbase/ai/dist/esm/models/Moonshot/type.js +2 -0
  110. package/node_modules/@cloudbase/ai/dist/esm/models/Yi/index.d.ts +10 -0
  111. package/node_modules/@cloudbase/ai/dist/esm/models/Yi/index.js +130 -0
  112. package/node_modules/@cloudbase/ai/dist/esm/models/Yi/type.d.ts +75 -0
  113. package/node_modules/@cloudbase/ai/dist/esm/models/Yi/type.js +2 -0
  114. package/node_modules/@cloudbase/ai/dist/esm/models/ZhiPu/index.d.ts +10 -0
  115. package/node_modules/@cloudbase/ai/dist/esm/models/ZhiPu/index.js +136 -0
  116. package/node_modules/@cloudbase/ai/dist/esm/models/ZhiPu/type.d.ts +71 -0
  117. package/node_modules/@cloudbase/ai/dist/esm/models/ZhiPu/type.js +2 -0
  118. package/node_modules/@cloudbase/ai/dist/esm/models/image-model.d.ts +18 -0
  119. package/node_modules/@cloudbase/ai/dist/esm/models/image-model.js +82 -0
  120. package/node_modules/@cloudbase/ai/dist/esm/models/index.d.ts +26 -0
  121. package/node_modules/@cloudbase/ai/dist/esm/models/index.js +27 -0
  122. package/node_modules/@cloudbase/ai/dist/esm/models/model.d.ts +40 -0
  123. package/node_modules/@cloudbase/ai/dist/esm/models/model.js +478 -0
  124. package/node_modules/@cloudbase/ai/dist/esm/type.d.ts +190 -0
  125. package/node_modules/@cloudbase/ai/dist/esm/type.js +7 -0
  126. package/node_modules/@cloudbase/ai/dist/esm/utils.d.ts +38 -0
  127. package/node_modules/@cloudbase/ai/dist/esm/utils.js +252 -0
  128. package/node_modules/@cloudbase/ai/dist/miniprogram/index.js +2 -0
  129. package/node_modules/@cloudbase/ai/dist/miniprogram/index.js.LICENSE.txt +22 -0
  130. package/node_modules/@cloudbase/ai/package.json +32 -0
  131. package/node_modules/@cloudbase/analytics/.eslintrc.js +15 -0
  132. package/node_modules/@cloudbase/analytics/dist/cjs/index.d.ts +2 -0
  133. package/node_modules/@cloudbase/analytics/dist/cjs/index.js +144 -0
  134. package/node_modules/@cloudbase/analytics/dist/esm/index.d.ts +2 -0
  135. package/node_modules/@cloudbase/analytics/dist/esm/index.js +140 -0
  136. package/node_modules/@cloudbase/analytics/package.json +22 -0
  137. package/node_modules/@cloudbase/apis/.eslintrc.js +15 -0
  138. package/node_modules/@cloudbase/apis/dist/cjs/callApis.d.ts +20 -0
  139. package/node_modules/@cloudbase/apis/dist/cjs/callApis.js +154 -0
  140. package/node_modules/@cloudbase/apis/dist/cjs/index.d.ts +5 -0
  141. package/node_modules/@cloudbase/apis/dist/cjs/index.js +53 -0
  142. package/node_modules/@cloudbase/apis/dist/cjs/type.d.ts +14 -0
  143. package/node_modules/@cloudbase/apis/dist/cjs/type.js +3 -0
  144. package/node_modules/@cloudbase/apis/dist/esm/callApis.d.ts +20 -0
  145. package/node_modules/@cloudbase/apis/dist/esm/callApis.js +148 -0
  146. package/node_modules/@cloudbase/apis/dist/esm/index.d.ts +5 -0
  147. package/node_modules/@cloudbase/apis/dist/esm/index.js +35 -0
  148. package/node_modules/@cloudbase/apis/dist/esm/type.d.ts +14 -0
  149. package/node_modules/@cloudbase/apis/dist/esm/type.js +2 -0
  150. package/node_modules/@cloudbase/apis/dist/miniprogram/index.js +1 -0
  151. package/node_modules/@cloudbase/apis/package.json +28 -0
  152. package/node_modules/@cloudbase/app/.eslintrc.js +12 -0
  153. package/node_modules/@cloudbase/app/dist/cjs/constants/common.d.ts +38 -0
  154. package/node_modules/@cloudbase/app/dist/cjs/constants/common.js +103 -0
  155. package/node_modules/@cloudbase/app/dist/cjs/index.d.ts +65 -0
  156. package/node_modules/@cloudbase/app/dist/cjs/index.js +340 -0
  157. package/node_modules/@cloudbase/app/dist/cjs/index.node.d.ts +6 -0
  158. package/node_modules/@cloudbase/app/dist/cjs/index.node.js +20 -0
  159. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/constants.d.ts +33 -0
  160. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/constants.js +38 -0
  161. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/context.d.ts +13 -0
  162. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/context.js +162 -0
  163. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/index.d.ts +23 -0
  164. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/index.js +124 -0
  165. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/metadata.d.ts +14 -0
  166. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/metadata.js +130 -0
  167. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/request.d.ts +38 -0
  168. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/request.js +445 -0
  169. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/tool.d.ts +2 -0
  170. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/tool.js +228 -0
  171. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/types.d.ts +78 -0
  172. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/types.js +3 -0
  173. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/utils.d.ts +17 -0
  174. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/utils.js +221 -0
  175. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter.d.ts +3 -0
  176. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter.js +163 -0
  177. package/node_modules/@cloudbase/app/dist/cjs/libs/cache.d.ts +6 -0
  178. package/node_modules/@cloudbase/app/dist/cjs/libs/cache.js +38 -0
  179. package/node_modules/@cloudbase/app/dist/cjs/libs/component.d.ts +3 -0
  180. package/node_modules/@cloudbase/app/dist/cjs/libs/component.js +126 -0
  181. package/node_modules/@cloudbase/app/dist/cjs/libs/lang.d.ts +23 -0
  182. package/node_modules/@cloudbase/app/dist/cjs/libs/lang.js +59 -0
  183. package/node_modules/@cloudbase/app/dist/cjs/libs/request.d.ts +62 -0
  184. package/node_modules/@cloudbase/app/dist/cjs/libs/request.js +480 -0
  185. package/node_modules/@cloudbase/app/dist/esm/constants/common.d.ts +38 -0
  186. package/node_modules/@cloudbase/app/dist/esm/constants/common.js +91 -0
  187. package/node_modules/@cloudbase/app/dist/esm/index.d.ts +65 -0
  188. package/node_modules/@cloudbase/app/dist/esm/index.js +335 -0
  189. package/node_modules/@cloudbase/app/dist/esm/index.node.d.ts +6 -0
  190. package/node_modules/@cloudbase/app/dist/esm/index.node.js +12 -0
  191. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/constants.d.ts +33 -0
  192. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/constants.js +35 -0
  193. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/context.d.ts +13 -0
  194. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/context.js +156 -0
  195. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/index.d.ts +23 -0
  196. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/index.js +118 -0
  197. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/metadata.d.ts +14 -0
  198. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/metadata.js +123 -0
  199. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/request.d.ts +38 -0
  200. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/request.js +442 -0
  201. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/tool.d.ts +2 -0
  202. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/tool.js +224 -0
  203. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/types.d.ts +78 -0
  204. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/types.js +2 -0
  205. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/utils.d.ts +17 -0
  206. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/utils.js +205 -0
  207. package/node_modules/@cloudbase/app/dist/esm/libs/adapter.d.ts +3 -0
  208. package/node_modules/@cloudbase/app/dist/esm/libs/adapter.js +136 -0
  209. package/node_modules/@cloudbase/app/dist/esm/libs/cache.d.ts +6 -0
  210. package/node_modules/@cloudbase/app/dist/esm/libs/cache.js +32 -0
  211. package/node_modules/@cloudbase/app/dist/esm/libs/component.d.ts +3 -0
  212. package/node_modules/@cloudbase/app/dist/esm/libs/component.js +121 -0
  213. package/node_modules/@cloudbase/app/dist/esm/libs/lang.d.ts +23 -0
  214. package/node_modules/@cloudbase/app/dist/esm/libs/lang.js +54 -0
  215. package/node_modules/@cloudbase/app/dist/esm/libs/request.d.ts +62 -0
  216. package/node_modules/@cloudbase/app/dist/esm/libs/request.js +475 -0
  217. package/node_modules/@cloudbase/app/dist/miniprogram/index.js +2 -0
  218. package/node_modules/@cloudbase/app/dist/miniprogram/index.js.LICENSE.txt +7 -0
  219. package/node_modules/@cloudbase/app/package.json +59 -0
  220. package/node_modules/@cloudbase/auth/.eslintrc.js +15 -0
  221. package/node_modules/@cloudbase/auth/dist/cjs/adapter.d.ts +2 -0
  222. package/node_modules/@cloudbase/auth/dist/cjs/adapter.js +272 -0
  223. package/node_modules/@cloudbase/auth/dist/cjs/index.d.ts +283 -0
  224. package/node_modules/@cloudbase/auth/dist/cjs/index.js +3018 -0
  225. package/node_modules/@cloudbase/auth/dist/cjs/type.d.ts +258 -0
  226. package/node_modules/@cloudbase/auth/dist/cjs/type.js +6 -0
  227. package/node_modules/@cloudbase/auth/dist/cjs/utilities.d.ts +7 -0
  228. package/node_modules/@cloudbase/auth/dist/cjs/utilities.js +23 -0
  229. package/node_modules/@cloudbase/auth/dist/cjs/utils.d.ts +5 -0
  230. package/node_modules/@cloudbase/auth/dist/cjs/utils.js +60 -0
  231. package/node_modules/@cloudbase/auth/dist/cjs/v1-compat.d.ts +77 -0
  232. package/node_modules/@cloudbase/auth/dist/cjs/v1-compat.js +423 -0
  233. package/node_modules/@cloudbase/auth/dist/esm/adapter.d.ts +2 -0
  234. package/node_modules/@cloudbase/auth/dist/esm/adapter.js +268 -0
  235. package/node_modules/@cloudbase/auth/dist/esm/index.d.ts +283 -0
  236. package/node_modules/@cloudbase/auth/dist/esm/index.js +3008 -0
  237. package/node_modules/@cloudbase/auth/dist/esm/type.d.ts +258 -0
  238. package/node_modules/@cloudbase/auth/dist/esm/type.js +3 -0
  239. package/node_modules/@cloudbase/auth/dist/esm/utilities.d.ts +7 -0
  240. package/node_modules/@cloudbase/auth/dist/esm/utilities.js +8 -0
  241. package/node_modules/@cloudbase/auth/dist/esm/utils.d.ts +5 -0
  242. package/node_modules/@cloudbase/auth/dist/esm/utils.js +52 -0
  243. package/node_modules/@cloudbase/auth/dist/esm/v1-compat.d.ts +77 -0
  244. package/node_modules/@cloudbase/auth/dist/esm/v1-compat.js +419 -0
  245. package/node_modules/@cloudbase/auth/dist/miniprogram/index.js +1 -0
  246. package/node_modules/@cloudbase/auth/package.json +31 -0
  247. package/node_modules/@cloudbase/cloudrun/.eslintrc.js +15 -0
  248. package/node_modules/@cloudbase/cloudrun/dist/cjs/index.d.ts +4 -0
  249. package/node_modules/@cloudbase/cloudrun/dist/cjs/index.js +154 -0
  250. package/node_modules/@cloudbase/cloudrun/dist/esm/index.d.ts +4 -0
  251. package/node_modules/@cloudbase/cloudrun/dist/esm/index.js +149 -0
  252. package/node_modules/@cloudbase/cloudrun/package.json +30 -0
  253. package/node_modules/@cloudbase/container/.eslintrc.js +15 -0
  254. package/node_modules/@cloudbase/container/.prettierrc.js +41 -0
  255. package/node_modules/@cloudbase/container/dist/cjs/constants/index.d.ts +1 -0
  256. package/node_modules/@cloudbase/container/dist/cjs/constants/index.js +5 -0
  257. package/node_modules/@cloudbase/container/dist/cjs/go_wams_exec.d.ts +2 -0
  258. package/node_modules/@cloudbase/container/dist/cjs/go_wams_exec.js +538 -0
  259. package/node_modules/@cloudbase/container/dist/cjs/index.d.ts +13 -0
  260. package/node_modules/@cloudbase/container/dist/cjs/index.js +343 -0
  261. package/node_modules/@cloudbase/container/dist/cjs/utils/index.d.ts +3 -0
  262. package/node_modules/@cloudbase/container/dist/cjs/utils/index.js +83 -0
  263. package/node_modules/@cloudbase/container/dist/cjs/utils/loader.d.ts +8 -0
  264. package/node_modules/@cloudbase/container/dist/cjs/utils/loader.js +186 -0
  265. package/node_modules/@cloudbase/container/dist/cjs/utils/request.d.ts +12 -0
  266. package/node_modules/@cloudbase/container/dist/cjs/utils/request.js +106 -0
  267. package/node_modules/@cloudbase/container/dist/esm/constants/index.d.ts +1 -0
  268. package/node_modules/@cloudbase/container/dist/esm/constants/index.js +2 -0
  269. package/node_modules/@cloudbase/container/dist/esm/go_wams_exec.d.ts +2 -0
  270. package/node_modules/@cloudbase/container/dist/esm/go_wams_exec.js +536 -0
  271. package/node_modules/@cloudbase/container/dist/esm/index.d.ts +13 -0
  272. package/node_modules/@cloudbase/container/dist/esm/index.js +338 -0
  273. package/node_modules/@cloudbase/container/dist/esm/utils/index.d.ts +3 -0
  274. package/node_modules/@cloudbase/container/dist/esm/utils/index.js +77 -0
  275. package/node_modules/@cloudbase/container/dist/esm/utils/loader.d.ts +8 -0
  276. package/node_modules/@cloudbase/container/dist/esm/utils/loader.js +178 -0
  277. package/node_modules/@cloudbase/container/dist/esm/utils/request.d.ts +12 -0
  278. package/node_modules/@cloudbase/container/dist/esm/utils/request.js +102 -0
  279. package/node_modules/@cloudbase/container/package.json +30 -0
  280. package/node_modules/@cloudbase/database/README.md +119 -0
  281. package/node_modules/@cloudbase/database/dist/commonjs/aggregate.d.ts +29 -0
  282. package/node_modules/@cloudbase/database/dist/commonjs/aggregate.js +156 -0
  283. package/node_modules/@cloudbase/database/dist/commonjs/collection.d.ts +9 -0
  284. package/node_modules/@cloudbase/database/dist/commonjs/collection.js +49 -0
  285. package/node_modules/@cloudbase/database/dist/commonjs/command.d.ts +175 -0
  286. package/node_modules/@cloudbase/database/dist/commonjs/command.js +299 -0
  287. package/node_modules/@cloudbase/database/dist/commonjs/commands/logic.d.ts +24 -0
  288. package/node_modules/@cloudbase/database/dist/commonjs/commands/logic.js +89 -0
  289. package/node_modules/@cloudbase/database/dist/commonjs/commands/query.d.ts +68 -0
  290. package/node_modules/@cloudbase/database/dist/commonjs/commands/query.js +160 -0
  291. package/node_modules/@cloudbase/database/dist/commonjs/commands/update.d.ts +29 -0
  292. package/node_modules/@cloudbase/database/dist/commonjs/commands/update.js +51 -0
  293. package/node_modules/@cloudbase/database/dist/commonjs/config/app.config.d.ts +6 -0
  294. package/node_modules/@cloudbase/database/dist/commonjs/config/app.config.js +7 -0
  295. package/node_modules/@cloudbase/database/dist/commonjs/config/error.config.d.ts +3 -0
  296. package/node_modules/@cloudbase/database/dist/commonjs/config/error.config.js +16 -0
  297. package/node_modules/@cloudbase/database/dist/commonjs/const/code.d.ts +30 -0
  298. package/node_modules/@cloudbase/database/dist/commonjs/const/code.js +33 -0
  299. package/node_modules/@cloudbase/database/dist/commonjs/constant.d.ts +51 -0
  300. package/node_modules/@cloudbase/database/dist/commonjs/constant.js +75 -0
  301. package/node_modules/@cloudbase/database/dist/commonjs/document.d.ts +11 -0
  302. package/node_modules/@cloudbase/database/dist/commonjs/document.js +260 -0
  303. package/node_modules/@cloudbase/database/dist/commonjs/geo/index.d.ts +6 -0
  304. package/{ai/dist → node_modules/@cloudbase/database/dist/commonjs/geo}/index.js +6 -5
  305. package/node_modules/@cloudbase/database/dist/commonjs/geo/interface.d.ts +24 -0
  306. package/node_modules/@cloudbase/database/dist/commonjs/geo/interface.js +2 -0
  307. package/node_modules/@cloudbase/database/dist/commonjs/geo/lineString.d.ts +19 -0
  308. package/node_modules/@cloudbase/database/dist/commonjs/geo/lineString.js +86 -0
  309. package/node_modules/@cloudbase/database/dist/commonjs/geo/multiLineString.d.ts +18 -0
  310. package/node_modules/@cloudbase/database/dist/commonjs/geo/multiLineString.js +95 -0
  311. package/node_modules/@cloudbase/database/dist/commonjs/geo/multiPoint.d.ts +18 -0
  312. package/node_modules/@cloudbase/database/dist/commonjs/geo/multiPoint.js +79 -0
  313. package/node_modules/@cloudbase/database/dist/commonjs/geo/multiPolygon.d.ts +18 -0
  314. package/node_modules/@cloudbase/database/dist/commonjs/geo/multiPolygon.js +122 -0
  315. package/node_modules/@cloudbase/database/dist/commonjs/geo/point.d.ts +19 -0
  316. package/node_modules/@cloudbase/database/dist/commonjs/geo/point.js +50 -0
  317. package/node_modules/@cloudbase/database/dist/commonjs/geo/polygon.d.ts +19 -0
  318. package/node_modules/@cloudbase/database/dist/commonjs/geo/polygon.js +109 -0
  319. package/node_modules/@cloudbase/database/dist/commonjs/helper/symbol.d.ts +14 -0
  320. package/node_modules/@cloudbase/database/dist/commonjs/helper/symbol.js +31 -0
  321. package/node_modules/@cloudbase/database/dist/commonjs/index.d.ts +40 -0
  322. package/node_modules/@cloudbase/database/dist/commonjs/index.js +61 -0
  323. package/node_modules/@cloudbase/database/dist/commonjs/lib/util.d.ts +1 -0
  324. package/node_modules/@cloudbase/database/dist/commonjs/lib/util.js +26 -0
  325. package/node_modules/@cloudbase/database/dist/commonjs/operator-map.d.ts +4 -0
  326. package/node_modules/@cloudbase/database/dist/commonjs/operator-map.js +24 -0
  327. package/node_modules/@cloudbase/database/dist/commonjs/query.d.ts +22 -0
  328. package/node_modules/@cloudbase/database/dist/commonjs/query.js +252 -0
  329. package/node_modules/@cloudbase/database/dist/commonjs/regexp/index.d.ts +14 -0
  330. package/node_modules/@cloudbase/database/dist/commonjs/regexp/index.js +33 -0
  331. package/node_modules/@cloudbase/database/dist/commonjs/serializer/common.d.ts +11 -0
  332. package/node_modules/@cloudbase/database/dist/commonjs/serializer/common.js +127 -0
  333. package/node_modules/@cloudbase/database/dist/commonjs/serializer/datatype.d.ts +7 -0
  334. package/node_modules/@cloudbase/database/dist/commonjs/serializer/datatype.js +132 -0
  335. package/node_modules/@cloudbase/database/dist/commonjs/serializer/query.d.ts +7 -0
  336. package/node_modules/@cloudbase/database/dist/commonjs/serializer/query.js +232 -0
  337. package/node_modules/@cloudbase/database/dist/commonjs/serializer/update.d.ts +15 -0
  338. package/node_modules/@cloudbase/database/dist/commonjs/serializer/update.js +142 -0
  339. package/node_modules/@cloudbase/database/dist/commonjs/serverDate/index.d.ts +13 -0
  340. package/node_modules/@cloudbase/database/dist/commonjs/serverDate/index.js +30 -0
  341. package/node_modules/@cloudbase/database/dist/commonjs/transaction/collection.d.ts +7 -0
  342. package/node_modules/@cloudbase/database/dist/commonjs/transaction/collection.js +49 -0
  343. package/node_modules/@cloudbase/database/dist/commonjs/transaction/document.d.ts +27 -0
  344. package/node_modules/@cloudbase/database/dist/commonjs/transaction/document.js +205 -0
  345. package/node_modules/@cloudbase/database/dist/commonjs/transaction/index.d.ts +30 -0
  346. package/node_modules/@cloudbase/database/dist/commonjs/transaction/index.js +215 -0
  347. package/node_modules/@cloudbase/database/dist/commonjs/transaction/query.d.ts +43 -0
  348. package/node_modules/@cloudbase/database/dist/commonjs/transaction/query.js +261 -0
  349. package/node_modules/@cloudbase/database/dist/commonjs/typings/index.d.ts +40 -0
  350. package/node_modules/@cloudbase/database/dist/commonjs/typings/index.js +2 -0
  351. package/node_modules/@cloudbase/database/dist/commonjs/typings/realtime.d.ts +219 -0
  352. package/node_modules/@cloudbase/database/dist/commonjs/typings/realtime.js +2 -0
  353. package/node_modules/@cloudbase/database/dist/commonjs/util.d.ts +9 -0
  354. package/node_modules/@cloudbase/database/dist/commonjs/util.js +145 -0
  355. package/node_modules/@cloudbase/database/dist/commonjs/utils/error.d.ts +38 -0
  356. package/node_modules/@cloudbase/database/dist/commonjs/utils/error.js +91 -0
  357. package/node_modules/@cloudbase/database/dist/commonjs/utils/msg.d.ts +0 -0
  358. package/node_modules/@cloudbase/database/dist/commonjs/utils/msg.js +0 -0
  359. package/node_modules/@cloudbase/database/dist/commonjs/utils/symbol.d.ts +8 -0
  360. package/node_modules/@cloudbase/database/dist/commonjs/utils/symbol.js +58 -0
  361. package/node_modules/@cloudbase/database/dist/commonjs/utils/type.d.ts +13 -0
  362. package/node_modules/@cloudbase/database/dist/commonjs/utils/type.js +34 -0
  363. package/node_modules/@cloudbase/database/dist/commonjs/utils/utils.d.ts +4 -0
  364. package/node_modules/@cloudbase/database/dist/commonjs/utils/utils.js +39 -0
  365. package/node_modules/@cloudbase/database/dist/commonjs/validate.d.ts +1 -0
  366. package/node_modules/@cloudbase/database/dist/commonjs/validate.js +60 -0
  367. package/node_modules/@cloudbase/database/dist/esm/aggregate.d.ts +29 -0
  368. package/node_modules/@cloudbase/database/dist/esm/aggregate.js +154 -0
  369. package/node_modules/@cloudbase/database/dist/esm/collection.d.ts +9 -0
  370. package/node_modules/@cloudbase/database/dist/esm/collection.js +46 -0
  371. package/node_modules/@cloudbase/database/dist/esm/command.d.ts +175 -0
  372. package/node_modules/@cloudbase/database/dist/esm/command.js +296 -0
  373. package/node_modules/@cloudbase/database/dist/esm/commands/logic.d.ts +24 -0
  374. package/node_modules/@cloudbase/database/dist/esm/commands/logic.js +84 -0
  375. package/node_modules/@cloudbase/database/dist/esm/commands/query.d.ts +68 -0
  376. package/node_modules/@cloudbase/database/dist/esm/commands/query.js +154 -0
  377. package/node_modules/@cloudbase/database/dist/esm/commands/update.d.ts +29 -0
  378. package/node_modules/@cloudbase/database/dist/esm/commands/update.js +46 -0
  379. package/node_modules/@cloudbase/database/dist/esm/config/app.config.d.ts +6 -0
  380. package/node_modules/@cloudbase/database/dist/esm/config/app.config.js +5 -0
  381. package/node_modules/@cloudbase/database/dist/esm/config/error.config.d.ts +3 -0
  382. package/node_modules/@cloudbase/database/dist/esm/config/error.config.js +13 -0
  383. package/node_modules/@cloudbase/database/dist/esm/const/code.d.ts +30 -0
  384. package/node_modules/@cloudbase/database/dist/esm/const/code.js +30 -0
  385. package/node_modules/@cloudbase/database/dist/esm/constant.d.ts +51 -0
  386. package/node_modules/@cloudbase/database/dist/esm/constant.js +65 -0
  387. package/node_modules/@cloudbase/database/dist/esm/document.d.ts +11 -0
  388. package/node_modules/@cloudbase/database/dist/esm/document.js +257 -0
  389. package/node_modules/@cloudbase/database/dist/esm/geo/index.d.ts +6 -0
  390. package/node_modules/@cloudbase/database/dist/esm/geo/index.js +6 -0
  391. package/node_modules/@cloudbase/database/dist/esm/geo/interface.d.ts +24 -0
  392. package/node_modules/@cloudbase/database/dist/esm/geo/interface.js +1 -0
  393. package/node_modules/@cloudbase/database/dist/esm/geo/lineString.d.ts +19 -0
  394. package/node_modules/@cloudbase/database/dist/esm/geo/lineString.js +83 -0
  395. package/node_modules/@cloudbase/database/dist/esm/geo/multiLineString.d.ts +18 -0
  396. package/node_modules/@cloudbase/database/dist/esm/geo/multiLineString.js +92 -0
  397. package/node_modules/@cloudbase/database/dist/esm/geo/multiPoint.d.ts +18 -0
  398. package/node_modules/@cloudbase/database/dist/esm/geo/multiPoint.js +76 -0
  399. package/node_modules/@cloudbase/database/dist/esm/geo/multiPolygon.d.ts +18 -0
  400. package/node_modules/@cloudbase/database/dist/esm/geo/multiPolygon.js +119 -0
  401. package/node_modules/@cloudbase/database/dist/esm/geo/point.d.ts +19 -0
  402. package/node_modules/@cloudbase/database/dist/esm/geo/point.js +47 -0
  403. package/node_modules/@cloudbase/database/dist/esm/geo/polygon.d.ts +19 -0
  404. package/node_modules/@cloudbase/database/dist/esm/geo/polygon.js +106 -0
  405. package/node_modules/@cloudbase/database/dist/esm/helper/symbol.d.ts +14 -0
  406. package/node_modules/@cloudbase/database/dist/esm/helper/symbol.js +14 -0
  407. package/node_modules/@cloudbase/database/dist/esm/index.d.ts +40 -0
  408. package/node_modules/@cloudbase/database/dist/esm/index.js +55 -0
  409. package/node_modules/@cloudbase/database/dist/esm/lib/util.d.ts +1 -0
  410. package/node_modules/@cloudbase/database/dist/esm/lib/util.js +22 -0
  411. package/node_modules/@cloudbase/database/dist/esm/operator-map.d.ts +4 -0
  412. package/node_modules/@cloudbase/database/dist/esm/operator-map.js +20 -0
  413. package/node_modules/@cloudbase/database/dist/esm/query.d.ts +22 -0
  414. package/node_modules/@cloudbase/database/dist/esm/query.js +249 -0
  415. package/node_modules/@cloudbase/database/dist/esm/regexp/index.d.ts +14 -0
  416. package/node_modules/@cloudbase/database/dist/esm/regexp/index.js +29 -0
  417. package/node_modules/@cloudbase/database/dist/esm/serializer/common.d.ts +11 -0
  418. package/node_modules/@cloudbase/database/dist/esm/serializer/common.js +118 -0
  419. package/node_modules/@cloudbase/database/dist/esm/serializer/datatype.d.ts +7 -0
  420. package/node_modules/@cloudbase/database/dist/esm/serializer/datatype.js +127 -0
  421. package/node_modules/@cloudbase/database/dist/esm/serializer/query.d.ts +7 -0
  422. package/node_modules/@cloudbase/database/dist/esm/serializer/query.js +229 -0
  423. package/node_modules/@cloudbase/database/dist/esm/serializer/update.d.ts +15 -0
  424. package/node_modules/@cloudbase/database/dist/esm/serializer/update.js +139 -0
  425. package/node_modules/@cloudbase/database/dist/esm/serverDate/index.d.ts +13 -0
  426. package/node_modules/@cloudbase/database/dist/esm/serverDate/index.js +26 -0
  427. package/node_modules/@cloudbase/database/dist/esm/transaction/collection.d.ts +7 -0
  428. package/node_modules/@cloudbase/database/dist/esm/transaction/collection.js +46 -0
  429. package/node_modules/@cloudbase/database/dist/esm/transaction/document.d.ts +27 -0
  430. package/node_modules/@cloudbase/database/dist/esm/transaction/document.js +202 -0
  431. package/node_modules/@cloudbase/database/dist/esm/transaction/index.d.ts +30 -0
  432. package/node_modules/@cloudbase/database/dist/esm/transaction/index.js +210 -0
  433. package/node_modules/@cloudbase/database/dist/esm/transaction/query.d.ts +43 -0
  434. package/node_modules/@cloudbase/database/dist/esm/transaction/query.js +258 -0
  435. package/node_modules/@cloudbase/database/dist/esm/typings/index.d.ts +40 -0
  436. package/node_modules/@cloudbase/database/dist/esm/typings/index.js +1 -0
  437. package/node_modules/@cloudbase/database/dist/esm/typings/realtime.d.ts +219 -0
  438. package/node_modules/@cloudbase/database/dist/esm/typings/realtime.js +1 -0
  439. package/node_modules/@cloudbase/database/dist/esm/util.d.ts +9 -0
  440. package/node_modules/@cloudbase/database/dist/esm/util.js +142 -0
  441. package/node_modules/@cloudbase/database/dist/esm/utils/error.d.ts +38 -0
  442. package/node_modules/@cloudbase/database/dist/esm/utils/error.js +84 -0
  443. package/node_modules/@cloudbase/database/dist/esm/utils/msg.d.ts +0 -0
  444. package/node_modules/@cloudbase/database/dist/esm/utils/msg.js +0 -0
  445. package/node_modules/@cloudbase/database/dist/esm/utils/symbol.d.ts +8 -0
  446. package/node_modules/@cloudbase/database/dist/esm/utils/symbol.js +55 -0
  447. package/node_modules/@cloudbase/database/dist/esm/utils/type.d.ts +13 -0
  448. package/node_modules/@cloudbase/database/dist/esm/utils/type.js +20 -0
  449. package/node_modules/@cloudbase/database/dist/esm/utils/utils.d.ts +4 -0
  450. package/node_modules/@cloudbase/database/dist/esm/utils/utils.js +33 -0
  451. package/node_modules/@cloudbase/database/dist/esm/validate.d.ts +1 -0
  452. package/node_modules/@cloudbase/database/dist/esm/validate.js +57 -0
  453. package/node_modules/@cloudbase/database/package.json +36 -0
  454. package/node_modules/@cloudbase/database/tsconfig.test.json +15 -0
  455. package/node_modules/@cloudbase/functions/.eslintrc.js +15 -0
  456. package/node_modules/@cloudbase/functions/dist/cjs/index.d.ts +2 -0
  457. package/node_modules/@cloudbase/functions/dist/cjs/index.js +223 -0
  458. package/node_modules/@cloudbase/functions/dist/esm/index.d.ts +2 -0
  459. package/node_modules/@cloudbase/functions/dist/esm/index.js +219 -0
  460. package/node_modules/@cloudbase/functions/package.json +32 -0
  461. package/node_modules/@cloudbase/model/.eslintrc.js +15 -0
  462. package/node_modules/@cloudbase/model/dist/cjs/index.d.ts +5 -0
  463. package/node_modules/@cloudbase/model/dist/cjs/index.js +144 -0
  464. package/node_modules/@cloudbase/model/dist/esm/index.d.ts +5 -0
  465. package/node_modules/@cloudbase/model/dist/esm/index.js +125 -0
  466. package/node_modules/@cloudbase/model/package.json +29 -0
  467. package/node_modules/@cloudbase/mysql/.eslintrc.js +6 -0
  468. package/node_modules/@cloudbase/mysql/dist/cjs/index.d.ts +4 -0
  469. package/node_modules/@cloudbase/mysql/dist/cjs/index.d.ts.map +1 -0
  470. package/node_modules/@cloudbase/mysql/dist/cjs/index.js +173 -0
  471. package/node_modules/@cloudbase/mysql/dist/esm/index.d.ts +3 -0
  472. package/node_modules/@cloudbase/mysql/dist/esm/index.js +155 -0
  473. package/node_modules/@cloudbase/mysql/package.json +30 -0
  474. package/node_modules/@cloudbase/oauth/.eslintrc.js +15 -0
  475. package/node_modules/@cloudbase/oauth/dist/cjs/auth/apis.d.ts +142 -0
  476. package/node_modules/@cloudbase/oauth/dist/cjs/auth/apis.js +1280 -0
  477. package/node_modules/@cloudbase/oauth/dist/cjs/auth/auth-error.d.ts +22 -0
  478. package/node_modules/@cloudbase/oauth/dist/cjs/auth/auth-error.js +278 -0
  479. package/node_modules/@cloudbase/oauth/dist/cjs/auth/consts.d.ts +139 -0
  480. package/node_modules/@cloudbase/oauth/dist/cjs/auth/consts.js +147 -0
  481. package/node_modules/@cloudbase/oauth/dist/cjs/auth/models.d.ts +557 -0
  482. package/node_modules/@cloudbase/oauth/dist/cjs/auth/models.js +3 -0
  483. package/node_modules/@cloudbase/oauth/dist/cjs/captcha/captcha-dom.d.ts +3 -0
  484. package/node_modules/@cloudbase/oauth/dist/cjs/captcha/captcha-dom.js +223 -0
  485. package/node_modules/@cloudbase/oauth/dist/cjs/captcha/captcha.d.ts +42 -0
  486. package/node_modules/@cloudbase/oauth/dist/cjs/captcha/captcha.js +205 -0
  487. package/node_modules/@cloudbase/oauth/dist/cjs/index.d.ts +22 -0
  488. package/node_modules/@cloudbase/oauth/dist/cjs/index.js +107 -0
  489. package/node_modules/@cloudbase/oauth/dist/cjs/oauth2client/consts.d.ts +20 -0
  490. package/node_modules/@cloudbase/oauth/dist/cjs/oauth2client/consts.js +26 -0
  491. package/node_modules/@cloudbase/oauth/dist/cjs/oauth2client/interface.d.ts +15 -0
  492. package/node_modules/@cloudbase/oauth/dist/cjs/oauth2client/interface.js +10 -0
  493. package/node_modules/@cloudbase/oauth/dist/cjs/oauth2client/models.d.ts +74 -0
  494. package/node_modules/@cloudbase/oauth/dist/cjs/oauth2client/models.js +3 -0
  495. package/node_modules/@cloudbase/oauth/dist/cjs/oauth2client/oauth2client.d.ts +129 -0
  496. package/node_modules/@cloudbase/oauth/dist/cjs/oauth2client/oauth2client.js +1174 -0
  497. package/node_modules/@cloudbase/oauth/dist/cjs/utils/base64.d.ts +9 -0
  498. package/node_modules/@cloudbase/oauth/dist/cjs/utils/base64.js +112 -0
  499. package/node_modules/@cloudbase/oauth/dist/cjs/utils/encrypt.d.ts +4 -0
  500. package/node_modules/@cloudbase/oauth/dist/cjs/utils/encrypt.js +26 -0
  501. package/node_modules/@cloudbase/oauth/dist/cjs/utils/encryptlong/index.d.ts +546 -0
  502. package/node_modules/@cloudbase/oauth/dist/cjs/utils/encryptlong/index.js +2982 -0
  503. package/node_modules/@cloudbase/oauth/dist/cjs/utils/function/single-promise.d.ts +6 -0
  504. package/node_modules/@cloudbase/oauth/dist/cjs/utils/function/single-promise.js +94 -0
  505. package/node_modules/@cloudbase/oauth/dist/cjs/utils/index.d.ts +2 -0
  506. package/node_modules/@cloudbase/oauth/dist/cjs/utils/index.js +56 -0
  507. package/node_modules/@cloudbase/oauth/dist/cjs/utils/mp.d.ts +2 -0
  508. package/node_modules/@cloudbase/oauth/dist/cjs/utils/mp.js +66 -0
  509. package/node_modules/@cloudbase/oauth/dist/cjs/utils/urlSearchParams.d.ts +13 -0
  510. package/node_modules/@cloudbase/oauth/dist/cjs/utils/urlSearchParams.js +66 -0
  511. package/node_modules/@cloudbase/oauth/dist/cjs/utils/uuid.d.ts +1 -0
  512. package/node_modules/@cloudbase/oauth/dist/cjs/utils/uuid.js +12 -0
  513. package/node_modules/@cloudbase/oauth/dist/esm/auth/apis.d.ts +142 -0
  514. package/node_modules/@cloudbase/oauth/dist/esm/auth/apis.js +768 -0
  515. package/node_modules/@cloudbase/oauth/dist/esm/auth/auth-error.d.ts +22 -0
  516. package/node_modules/@cloudbase/oauth/dist/esm/auth/auth-error.js +255 -0
  517. package/node_modules/@cloudbase/oauth/dist/esm/auth/consts.d.ts +139 -0
  518. package/node_modules/@cloudbase/oauth/dist/esm/auth/consts.js +144 -0
  519. package/node_modules/@cloudbase/oauth/dist/esm/auth/models.d.ts +557 -0
  520. package/node_modules/@cloudbase/oauth/dist/esm/auth/models.js +2 -0
  521. package/node_modules/@cloudbase/oauth/dist/esm/captcha/captcha-dom.d.ts +3 -0
  522. package/node_modules/@cloudbase/oauth/dist/esm/captcha/captcha-dom.js +130 -0
  523. package/node_modules/@cloudbase/oauth/dist/esm/captcha/captcha.d.ts +42 -0
  524. package/node_modules/@cloudbase/oauth/dist/esm/captcha/captcha.js +104 -0
  525. package/node_modules/@cloudbase/oauth/dist/esm/index.d.ts +22 -0
  526. package/node_modules/@cloudbase/oauth/dist/esm/index.js +64 -0
  527. package/node_modules/@cloudbase/oauth/dist/esm/oauth2client/consts.d.ts +20 -0
  528. package/node_modules/@cloudbase/oauth/dist/esm/oauth2client/consts.js +22 -0
  529. package/node_modules/@cloudbase/oauth/dist/esm/oauth2client/interface.d.ts +15 -0
  530. package/node_modules/@cloudbase/oauth/dist/esm/oauth2client/interface.js +3 -0
  531. package/node_modules/@cloudbase/oauth/dist/esm/oauth2client/models.d.ts +74 -0
  532. package/node_modules/@cloudbase/oauth/dist/esm/oauth2client/models.js +2 -0
  533. package/node_modules/@cloudbase/oauth/dist/esm/oauth2client/oauth2client.d.ts +129 -0
  534. package/node_modules/@cloudbase/oauth/dist/esm/oauth2client/oauth2client.js +711 -0
  535. package/node_modules/@cloudbase/oauth/dist/esm/utils/base64.d.ts +9 -0
  536. package/node_modules/@cloudbase/oauth/dist/esm/utils/base64.js +104 -0
  537. package/node_modules/@cloudbase/oauth/dist/esm/utils/encrypt.d.ts +4 -0
  538. package/node_modules/@cloudbase/oauth/dist/esm/utils/encrypt.js +18 -0
  539. package/node_modules/@cloudbase/oauth/dist/esm/utils/encryptlong/index.d.ts +546 -0
  540. package/node_modules/@cloudbase/oauth/dist/esm/utils/encryptlong/index.js +2953 -0
  541. package/node_modules/@cloudbase/oauth/dist/esm/utils/function/single-promise.d.ts +6 -0
  542. package/node_modules/@cloudbase/oauth/dist/esm/utils/function/single-promise.js +34 -0
  543. package/node_modules/@cloudbase/oauth/dist/esm/utils/index.d.ts +2 -0
  544. package/node_modules/@cloudbase/oauth/dist/esm/utils/index.js +51 -0
  545. package/node_modules/@cloudbase/oauth/dist/esm/utils/mp.d.ts +2 -0
  546. package/node_modules/@cloudbase/oauth/dist/esm/utils/mp.js +61 -0
  547. package/node_modules/@cloudbase/oauth/dist/esm/utils/urlSearchParams.d.ts +13 -0
  548. package/node_modules/@cloudbase/oauth/dist/esm/utils/urlSearchParams.js +58 -0
  549. package/node_modules/@cloudbase/oauth/dist/esm/utils/uuid.d.ts +1 -0
  550. package/node_modules/@cloudbase/oauth/dist/esm/utils/uuid.js +8 -0
  551. package/node_modules/@cloudbase/oauth/dist/miniprogram/index.js +1 -0
  552. package/node_modules/@cloudbase/oauth/package.json +20 -0
  553. package/node_modules/@cloudbase/realtime/.eslintrc.js +15 -0
  554. package/node_modules/@cloudbase/realtime/dist/cjs/common.d.ts +4 -0
  555. package/node_modules/@cloudbase/realtime/dist/cjs/common.js +22 -0
  556. package/node_modules/@cloudbase/realtime/dist/cjs/error.d.ts +36 -0
  557. package/node_modules/@cloudbase/realtime/dist/cjs/error.js +106 -0
  558. package/node_modules/@cloudbase/realtime/dist/cjs/index.d.ts +2 -0
  559. package/node_modules/@cloudbase/realtime/dist/cjs/index.js +36 -0
  560. package/node_modules/@cloudbase/realtime/dist/cjs/listener.d.ts +14 -0
  561. package/node_modules/@cloudbase/realtime/dist/cjs/listener.js +18 -0
  562. package/node_modules/@cloudbase/realtime/dist/cjs/message.d.ts +3 -0
  563. package/node_modules/@cloudbase/realtime/dist/cjs/message.js +13 -0
  564. package/node_modules/@cloudbase/realtime/dist/cjs/snapshot.d.ts +17 -0
  565. package/node_modules/@cloudbase/realtime/dist/cjs/snapshot.js +45 -0
  566. package/node_modules/@cloudbase/realtime/dist/cjs/utils.d.ts +1 -0
  567. package/node_modules/@cloudbase/realtime/dist/cjs/utils.js +9 -0
  568. package/node_modules/@cloudbase/realtime/dist/cjs/virtual-websocket-client.d.ts +62 -0
  569. package/node_modules/@cloudbase/realtime/dist/cjs/virtual-websocket-client.js +960 -0
  570. package/node_modules/@cloudbase/realtime/dist/cjs/websocket-client.d.ts +78 -0
  571. package/node_modules/@cloudbase/realtime/dist/cjs/websocket-client.js +750 -0
  572. package/node_modules/@cloudbase/realtime/dist/cjs/ws-event.d.ts +126 -0
  573. package/node_modules/@cloudbase/realtime/dist/cjs/ws-event.js +141 -0
  574. package/node_modules/@cloudbase/realtime/dist/esm/common.d.ts +4 -0
  575. package/node_modules/@cloudbase/realtime/dist/esm/common.js +15 -0
  576. package/node_modules/@cloudbase/realtime/dist/esm/error.d.ts +36 -0
  577. package/node_modules/@cloudbase/realtime/dist/esm/error.js +100 -0
  578. package/node_modules/@cloudbase/realtime/dist/esm/index.d.ts +2 -0
  579. package/node_modules/@cloudbase/realtime/dist/esm/index.js +32 -0
  580. package/node_modules/@cloudbase/realtime/dist/esm/listener.d.ts +14 -0
  581. package/node_modules/@cloudbase/realtime/dist/esm/listener.js +15 -0
  582. package/node_modules/@cloudbase/realtime/dist/esm/message.d.ts +3 -0
  583. package/node_modules/@cloudbase/realtime/dist/esm/message.js +8 -0
  584. package/node_modules/@cloudbase/realtime/dist/esm/snapshot.d.ts +17 -0
  585. package/node_modules/@cloudbase/realtime/dist/esm/snapshot.js +42 -0
  586. package/node_modules/@cloudbase/realtime/dist/esm/utils.d.ts +1 -0
  587. package/node_modules/@cloudbase/realtime/dist/esm/utils.js +5 -0
  588. package/node_modules/@cloudbase/realtime/dist/esm/virtual-websocket-client.d.ts +62 -0
  589. package/node_modules/@cloudbase/realtime/dist/esm/virtual-websocket-client.js +954 -0
  590. package/node_modules/@cloudbase/realtime/dist/esm/websocket-client.d.ts +78 -0
  591. package/node_modules/@cloudbase/realtime/dist/esm/websocket-client.js +747 -0
  592. package/node_modules/@cloudbase/realtime/dist/esm/ws-event.d.ts +126 -0
  593. package/node_modules/@cloudbase/realtime/dist/esm/ws-event.js +137 -0
  594. package/node_modules/@cloudbase/realtime/package.json +29 -0
  595. package/node_modules/@cloudbase/storage/.eslintrc.js +15 -0
  596. package/node_modules/@cloudbase/storage/dist/cjs/index.d.ts +195 -0
  597. package/node_modules/@cloudbase/storage/dist/cjs/index.js +1426 -0
  598. package/node_modules/@cloudbase/storage/dist/cjs/supabase/errors.d.ts +20 -0
  599. package/node_modules/@cloudbase/storage/dist/cjs/supabase/errors.js +65 -0
  600. package/node_modules/@cloudbase/storage/dist/cjs/supabase/types.d.ts +64 -0
  601. package/node_modules/@cloudbase/storage/dist/cjs/supabase/types.js +3 -0
  602. package/node_modules/@cloudbase/storage/dist/esm/index.d.ts +195 -0
  603. package/node_modules/@cloudbase/storage/dist/esm/index.js +1422 -0
  604. package/node_modules/@cloudbase/storage/dist/esm/supabase/errors.d.ts +20 -0
  605. package/node_modules/@cloudbase/storage/dist/esm/supabase/errors.js +61 -0
  606. package/node_modules/@cloudbase/storage/dist/esm/supabase/types.d.ts +64 -0
  607. package/node_modules/@cloudbase/storage/dist/esm/supabase/types.js +2 -0
  608. package/node_modules/@cloudbase/storage/package.json +28 -0
  609. package/node_modules/@cloudbase/types/auth.d.ts +99 -0
  610. package/node_modules/@cloudbase/types/cache.d.ts +26 -0
  611. package/node_modules/@cloudbase/types/cloudrun.d.ts +9 -0
  612. package/node_modules/@cloudbase/types/component.d.ts +17 -0
  613. package/node_modules/@cloudbase/types/database.d.ts +31 -0
  614. package/node_modules/@cloudbase/types/events.d.ts +13 -0
  615. package/node_modules/@cloudbase/types/functions.d.ts +40 -0
  616. package/node_modules/@cloudbase/types/index.d.ts +211 -0
  617. package/node_modules/@cloudbase/types/index.js +1 -0
  618. package/node_modules/@cloudbase/types/package.json +43 -0
  619. package/node_modules/@cloudbase/types/realtime.d.ts +350 -0
  620. package/node_modules/@cloudbase/types/request.d.ts +30 -0
  621. package/node_modules/@cloudbase/types/storage.d.ts +126 -0
  622. package/node_modules/@cloudbase/utilities/.eslintrc.js +15 -0
  623. package/node_modules/@cloudbase/utilities/dist/cjs/adapters/index.d.ts +45 -0
  624. package/node_modules/@cloudbase/utilities/dist/cjs/adapters/index.js +68 -0
  625. package/node_modules/@cloudbase/utilities/dist/cjs/adapters/platforms/web.d.ts +20 -0
  626. package/node_modules/@cloudbase/utilities/dist/cjs/adapters/platforms/web.js +278 -0
  627. package/node_modules/@cloudbase/utilities/dist/cjs/constants/common.d.ts +6 -0
  628. package/node_modules/@cloudbase/utilities/dist/cjs/constants/common.js +24 -0
  629. package/node_modules/@cloudbase/utilities/dist/cjs/constants/errors.d.ts +8 -0
  630. package/node_modules/@cloudbase/utilities/dist/cjs/constants/errors.js +12 -0
  631. package/node_modules/@cloudbase/utilities/dist/cjs/constants/index.d.ts +3 -0
  632. package/{model/dist → node_modules/@cloudbase/utilities/dist/cjs/constants}/index.js +5 -5
  633. package/node_modules/@cloudbase/utilities/dist/cjs/helpers/decorators.d.ts +11 -0
  634. package/node_modules/@cloudbase/utilities/dist/cjs/helpers/decorators.js +238 -0
  635. package/node_modules/@cloudbase/utilities/dist/cjs/helpers/index.d.ts +1 -0
  636. package/{apis/dist → node_modules/@cloudbase/utilities/dist/cjs/helpers}/index.js +2 -5
  637. package/node_modules/@cloudbase/utilities/dist/cjs/index.d.ts +13 -0
  638. package/node_modules/@cloudbase/utilities/dist/cjs/index.js +51 -0
  639. package/node_modules/@cloudbase/utilities/dist/cjs/libs/abortController.d.ts +9 -0
  640. package/node_modules/@cloudbase/utilities/dist/cjs/libs/abortController.js +25 -0
  641. package/node_modules/@cloudbase/utilities/dist/cjs/libs/cache.d.ts +17 -0
  642. package/node_modules/@cloudbase/utilities/dist/cjs/libs/cache.js +261 -0
  643. package/node_modules/@cloudbase/utilities/dist/cjs/libs/events.d.ts +27 -0
  644. package/node_modules/@cloudbase/utilities/dist/cjs/libs/events.js +108 -0
  645. package/node_modules/@cloudbase/utilities/dist/cjs/libs/langEvent.d.ts +3 -0
  646. package/node_modules/@cloudbase/utilities/dist/cjs/libs/langEvent.js +7 -0
  647. package/node_modules/@cloudbase/utilities/dist/cjs/libs/util.d.ts +49 -0
  648. package/node_modules/@cloudbase/utilities/dist/cjs/libs/util.js +282 -0
  649. package/node_modules/@cloudbase/utilities/dist/esm/adapters/index.d.ts +45 -0
  650. package/node_modules/@cloudbase/utilities/dist/esm/adapters/index.js +40 -0
  651. package/node_modules/@cloudbase/utilities/dist/esm/adapters/platforms/web.d.ts +20 -0
  652. package/node_modules/@cloudbase/utilities/dist/esm/adapters/platforms/web.js +274 -0
  653. package/node_modules/@cloudbase/utilities/dist/esm/constants/common.d.ts +6 -0
  654. package/node_modules/@cloudbase/utilities/dist/esm/constants/common.js +17 -0
  655. package/node_modules/@cloudbase/utilities/dist/esm/constants/errors.d.ts +8 -0
  656. package/node_modules/@cloudbase/utilities/dist/esm/constants/errors.js +9 -0
  657. package/node_modules/@cloudbase/utilities/dist/esm/constants/index.d.ts +3 -0
  658. package/node_modules/@cloudbase/utilities/dist/esm/constants/index.js +4 -0
  659. package/node_modules/@cloudbase/utilities/dist/esm/helpers/decorators.d.ts +11 -0
  660. package/node_modules/@cloudbase/utilities/dist/esm/helpers/decorators.js +234 -0
  661. package/node_modules/@cloudbase/utilities/dist/esm/helpers/index.d.ts +1 -0
  662. package/node_modules/@cloudbase/utilities/dist/esm/helpers/index.js +2 -0
  663. package/node_modules/@cloudbase/utilities/dist/esm/index.d.ts +13 -0
  664. package/node_modules/@cloudbase/utilities/dist/esm/index.js +14 -0
  665. package/node_modules/@cloudbase/utilities/dist/esm/libs/abortController.d.ts +9 -0
  666. package/node_modules/@cloudbase/utilities/dist/esm/libs/abortController.js +23 -0
  667. package/node_modules/@cloudbase/utilities/dist/esm/libs/cache.d.ts +17 -0
  668. package/node_modules/@cloudbase/utilities/dist/esm/libs/cache.js +258 -0
  669. package/node_modules/@cloudbase/utilities/dist/esm/libs/events.d.ts +27 -0
  670. package/node_modules/@cloudbase/utilities/dist/esm/libs/events.js +102 -0
  671. package/node_modules/@cloudbase/utilities/dist/esm/libs/langEvent.d.ts +3 -0
  672. package/node_modules/@cloudbase/utilities/dist/esm/libs/langEvent.js +4 -0
  673. package/node_modules/@cloudbase/utilities/dist/esm/libs/util.d.ts +49 -0
  674. package/node_modules/@cloudbase/utilities/dist/esm/libs/util.js +254 -0
  675. package/node_modules/@cloudbase/utilities/dist/miniprogram/index.js +1 -0
  676. package/node_modules/@cloudbase/utilities/package.json +26 -0
  677. package/package.json +2 -2
  678. package/ai/dist/index.d.ts +0 -1
  679. package/ai/dist/index.esm.js +0 -3
  680. package/analytics/dist/index.d.ts +0 -2
  681. package/analytics/dist/index.esm.js +0 -4
  682. package/analytics/dist/index.js +0 -9
  683. package/apis/dist/index.d.ts +0 -1
  684. package/apis/dist/index.esm.js +0 -3
  685. package/app/dist/index.d.ts +0 -9
  686. package/app/dist/index.esm.js +0 -11
  687. package/app/dist/index.js +0 -18
  688. package/auth/dist/index.d.ts +0 -2
  689. package/auth/dist/index.esm.js +0 -8
  690. package/auth/dist/index.js +0 -13
  691. package/cloudrun/dist/index.d.ts +0 -1
  692. package/cloudrun/dist/index.esm.js +0 -3
  693. package/cloudrun/dist/index.js +0 -21
  694. package/container/dist/index.d.ts +0 -2
  695. package/container/dist/index.esm.js +0 -8
  696. package/container/dist/index.js +0 -13
  697. package/database/dist/index.d.ts +0 -3
  698. package/database/dist/index.esm.js +0 -503
  699. package/database/dist/index.js +0 -509
  700. package/dist/index.esm.js +0 -35
  701. package/functions/dist/index.d.ts +0 -2
  702. package/functions/dist/index.esm.js +0 -8
  703. package/functions/dist/index.js +0 -13
  704. package/model/dist/index.d.ts +0 -1
  705. package/model/dist/index.esm.js +0 -3
  706. package/mysql/dist/index.d.ts +0 -1
  707. package/mysql/dist/index.esm.js +0 -3
  708. package/mysql/dist/index.js +0 -21
  709. package/oauth/dist/index.d.ts +0 -1
  710. package/oauth/dist/index.esm.js +0 -3
  711. package/oauth/dist/index.js +0 -21
  712. package/realtime/dist/index.d.ts +0 -2
  713. package/realtime/dist/index.esm.js +0 -8
  714. package/realtime/dist/index.js +0 -13
  715. package/storage/dist/index.d.ts +0 -2
  716. package/storage/dist/index.esm.js +0 -4
  717. package/storage/dist/index.js +0 -9
@@ -0,0 +1,954 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
38
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
39
+ if (ar || !(i in from)) {
40
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
41
+ ar[i] = from[i];
42
+ }
43
+ }
44
+ return to.concat(ar || Array.prototype.slice.call(from));
45
+ };
46
+ import set from 'lodash/set';
47
+ import unset from 'lodash/unset';
48
+ import cloneDeep from 'lodash/cloneDeep';
49
+ import { genRequestId } from './message';
50
+ import { RealtimeListener } from './listener';
51
+ import { Snapshot } from './snapshot';
52
+ import { ERR_CODE, CloudSDKError, isTimeoutError, CancelledError, isCancelledError, isRealtimeErrorMessageError, } from './error';
53
+ import { sleep } from './utils';
54
+ var WatchStatus;
55
+ (function (WatchStatus) {
56
+ WatchStatus["LOGGINGIN"] = "LOGGINGIN";
57
+ WatchStatus["INITING"] = "INITING";
58
+ WatchStatus["REBUILDING"] = "REBUILDING";
59
+ WatchStatus["ACTIVE"] = "ACTIVE";
60
+ WatchStatus["ERRORED"] = "ERRORED";
61
+ WatchStatus["CLOSING"] = "CLOSING";
62
+ WatchStatus["CLOSED"] = "CLOSED";
63
+ WatchStatus["PAUSED"] = "PAUSED";
64
+ WatchStatus["RESUMING"] = "RESUMING";
65
+ })(WatchStatus || (WatchStatus = {}));
66
+ var DEFAULT_WAIT_TIME_ON_UNKNOWN_ERROR = 100;
67
+ var DEFAULT_MAX_AUTO_RETRY_ON_ERROR = 2;
68
+ var DEFAULT_MAX_SEND_ACK_AUTO_RETRY_ON_ERROR = 2;
69
+ var DEFAULT_SEND_ACK_DEBOUNCE_TIMEOUT = 10 * 1000;
70
+ var DEFAULT_INIT_WATCH_TIMEOUT = 10 * 1000;
71
+ var DEFAULT_REBUILD_WATCH_TIMEOUT = 10 * 1000;
72
+ var VirtualWebSocketClient = (function () {
73
+ function VirtualWebSocketClient(options) {
74
+ var _this = this;
75
+ this.watchStatus = WatchStatus.INITING;
76
+ this.wsLogin = function (envId, refresh) { return __awaiter(_this, void 0, void 0, function () {
77
+ var loginResult;
78
+ return __generator(this, function (_a) {
79
+ switch (_a.label) {
80
+ case 0:
81
+ this.watchStatus = WatchStatus.LOGGINGIN;
82
+ return [4, this.login(envId, refresh)];
83
+ case 1:
84
+ loginResult = _a.sent();
85
+ if (!this.envId) {
86
+ this.envId = loginResult.envId;
87
+ }
88
+ return [2, loginResult];
89
+ }
90
+ });
91
+ }); };
92
+ this.initWatch = function (forceRefreshLogin) { return __awaiter(_this, void 0, void 0, function () {
93
+ var success;
94
+ var _this = this;
95
+ return __generator(this, function (_a) {
96
+ switch (_a.label) {
97
+ case 0:
98
+ if (this.initWatchPromise !== null && this.initWatchPromise !== undefined) {
99
+ return [2, this.initWatchPromise];
100
+ }
101
+ this.initWatchPromise = new Promise(function (resolve, reject) {
102
+ void (function () { return __awaiter(_this, void 0, void 0, function () {
103
+ var envId, initWatchMsg, initEventMsg, _a, events, currEvent, _i, events_1, e, snapshot, e_1;
104
+ return __generator(this, function (_b) {
105
+ switch (_b.label) {
106
+ case 0:
107
+ _b.trys.push([0, 3, , 4]);
108
+ if (this.watchStatus === WatchStatus.PAUSED) {
109
+ console.log('[realtime] initWatch cancelled on pause');
110
+ return [2, resolve()];
111
+ }
112
+ return [4, this.wsLogin(this.envId, forceRefreshLogin)];
113
+ case 1:
114
+ envId = (_b.sent()).envId;
115
+ if (this.watchStatus === WatchStatus.PAUSED) {
116
+ console.log('[realtime] initWatch cancelled on pause');
117
+ return [2, resolve()];
118
+ }
119
+ this.watchStatus = WatchStatus.INITING;
120
+ initWatchMsg = {
121
+ watchId: this.watchId,
122
+ requestId: genRequestId(),
123
+ msgType: 'INIT_WATCH',
124
+ msgData: {
125
+ envId: envId,
126
+ collName: this.collectionName,
127
+ query: this.query,
128
+ limit: this.limit,
129
+ orderBy: this.orderBy,
130
+ },
131
+ };
132
+ return [4, this.send({
133
+ msg: initWatchMsg,
134
+ waitResponse: true,
135
+ skipOnMessage: true,
136
+ timeout: DEFAULT_INIT_WATCH_TIMEOUT,
137
+ })];
138
+ case 2:
139
+ initEventMsg = _b.sent();
140
+ _a = initEventMsg.msgData, events = _a.events, currEvent = _a.currEvent;
141
+ this.sessionInfo = {
142
+ queryID: initEventMsg.msgData.queryID,
143
+ currentEventId: currEvent - 1,
144
+ currentDocs: [],
145
+ };
146
+ if (events.length > 0) {
147
+ for (_i = 0, events_1 = events; _i < events_1.length; _i++) {
148
+ e = events_1[_i];
149
+ e.ID = currEvent;
150
+ }
151
+ this.handleServerEvents(initEventMsg);
152
+ }
153
+ else {
154
+ this.sessionInfo.currentEventId = currEvent;
155
+ snapshot = new Snapshot({
156
+ id: currEvent,
157
+ docChanges: [],
158
+ docs: [],
159
+ type: 'init',
160
+ });
161
+ this.listener.onChange(snapshot);
162
+ this.scheduleSendACK();
163
+ }
164
+ this.onWatchStart(this, this.sessionInfo.queryID);
165
+ this.watchStatus = WatchStatus.ACTIVE;
166
+ this.availableRetries.INIT_WATCH = DEFAULT_MAX_AUTO_RETRY_ON_ERROR;
167
+ resolve();
168
+ return [3, 4];
169
+ case 3:
170
+ e_1 = _b.sent();
171
+ this.handleWatchEstablishmentError(e_1, {
172
+ operationName: 'INIT_WATCH',
173
+ resolve: resolve,
174
+ reject: reject,
175
+ });
176
+ return [3, 4];
177
+ case 4: return [2];
178
+ }
179
+ });
180
+ }); })();
181
+ });
182
+ success = false;
183
+ _a.label = 1;
184
+ case 1:
185
+ _a.trys.push([1, , 3, 4]);
186
+ return [4, this.initWatchPromise];
187
+ case 2:
188
+ _a.sent();
189
+ success = true;
190
+ return [3, 4];
191
+ case 3:
192
+ this.initWatchPromise = undefined;
193
+ return [7];
194
+ case 4:
195
+ console.log("[realtime] initWatch ".concat(success ? 'success' : 'fail'));
196
+ return [2];
197
+ }
198
+ });
199
+ }); };
200
+ this.rebuildWatch = function (forceRefreshLogin) { return __awaiter(_this, void 0, void 0, function () {
201
+ var success;
202
+ var _this = this;
203
+ return __generator(this, function (_a) {
204
+ switch (_a.label) {
205
+ case 0:
206
+ if (this.rebuildWatchPromise !== null && this.rebuildWatchPromise !== undefined) {
207
+ return [2, this.rebuildWatchPromise];
208
+ }
209
+ this.rebuildWatchPromise = new Promise(function (resolve, reject) {
210
+ void (function () { return __awaiter(_this, void 0, void 0, function () {
211
+ var envId, rebuildWatchMsg, nextEventMsg, e_2;
212
+ return __generator(this, function (_a) {
213
+ switch (_a.label) {
214
+ case 0:
215
+ _a.trys.push([0, 3, , 4]);
216
+ if (this.watchStatus === WatchStatus.PAUSED) {
217
+ console.log('[realtime] rebuildWatch cancelled on pause');
218
+ return [2, resolve()];
219
+ }
220
+ return [4, this.wsLogin(this.envId, forceRefreshLogin)];
221
+ case 1:
222
+ envId = (_a.sent()).envId;
223
+ if (!this.sessionInfo) {
224
+ throw new Error('can not rebuildWatch without a successful initWatch (lack of sessionInfo)');
225
+ }
226
+ if (this.watchStatus === WatchStatus.PAUSED) {
227
+ console.log('[realtime] rebuildWatch cancelled on pause');
228
+ return [2, resolve()];
229
+ }
230
+ this.watchStatus = WatchStatus.REBUILDING;
231
+ rebuildWatchMsg = {
232
+ watchId: this.watchId,
233
+ requestId: genRequestId(),
234
+ msgType: 'REBUILD_WATCH',
235
+ msgData: {
236
+ envId: envId,
237
+ collName: this.collectionName,
238
+ queryID: this.sessionInfo.queryID,
239
+ eventID: this.sessionInfo.currentEventId,
240
+ },
241
+ };
242
+ return [4, this.send({
243
+ msg: rebuildWatchMsg,
244
+ waitResponse: true,
245
+ skipOnMessage: false,
246
+ timeout: DEFAULT_REBUILD_WATCH_TIMEOUT,
247
+ })];
248
+ case 2:
249
+ nextEventMsg = _a.sent();
250
+ this.handleServerEvents(nextEventMsg);
251
+ this.watchStatus = WatchStatus.ACTIVE;
252
+ this.availableRetries.REBUILD_WATCH = DEFAULT_MAX_AUTO_RETRY_ON_ERROR;
253
+ resolve();
254
+ return [3, 4];
255
+ case 3:
256
+ e_2 = _a.sent();
257
+ this.handleWatchEstablishmentError(e_2, {
258
+ operationName: 'REBUILD_WATCH',
259
+ resolve: resolve,
260
+ reject: reject,
261
+ });
262
+ return [3, 4];
263
+ case 4: return [2];
264
+ }
265
+ });
266
+ }); })();
267
+ });
268
+ success = false;
269
+ _a.label = 1;
270
+ case 1:
271
+ _a.trys.push([1, , 3, 4]);
272
+ return [4, this.rebuildWatchPromise];
273
+ case 2:
274
+ _a.sent();
275
+ success = true;
276
+ return [3, 4];
277
+ case 3:
278
+ this.rebuildWatchPromise = undefined;
279
+ return [7];
280
+ case 4:
281
+ console.log("[realtime] rebuildWatch ".concat(success ? 'success' : 'fail'));
282
+ return [2];
283
+ }
284
+ });
285
+ }); };
286
+ this.handleWatchEstablishmentError = function (e, options) { return __awaiter(_this, void 0, void 0, function () {
287
+ var isInitWatch, abortWatch, retry;
288
+ var _this = this;
289
+ return __generator(this, function (_a) {
290
+ isInitWatch = options.operationName === 'INIT_WATCH';
291
+ abortWatch = function () {
292
+ _this.closeWithError(new CloudSDKError({
293
+ errCode: isInitWatch
294
+ ? ERR_CODE.SDK_DATABASE_REALTIME_LISTENER_INIT_WATCH_FAIL
295
+ : ERR_CODE.SDK_DATABASE_REALTIME_LISTENER_REBUILD_WATCH_FAIL,
296
+ errMsg: e,
297
+ }));
298
+ options.reject(e);
299
+ };
300
+ retry = function (refreshLogin) {
301
+ if (_this.useRetryTicket(options.operationName)) {
302
+ if (isInitWatch) {
303
+ _this.initWatchPromise = undefined;
304
+ options.resolve(_this.initWatch(refreshLogin));
305
+ }
306
+ else {
307
+ _this.rebuildWatchPromise = undefined;
308
+ options.resolve(_this.rebuildWatch(refreshLogin));
309
+ }
310
+ }
311
+ else {
312
+ abortWatch();
313
+ }
314
+ };
315
+ this.handleCommonError(e, {
316
+ onSignError: function () { return retry(true); },
317
+ onTimeoutError: function () { return retry(false); },
318
+ onNotRetryableError: abortWatch,
319
+ onCancelledError: options.reject,
320
+ onUnknownError: function () {
321
+ (function () { return __awaiter(_this, void 0, void 0, function () {
322
+ var onWSDisconnected, e_3;
323
+ var _this = this;
324
+ return __generator(this, function (_a) {
325
+ switch (_a.label) {
326
+ case 0:
327
+ _a.trys.push([0, 8, , 9]);
328
+ onWSDisconnected = function () { return __awaiter(_this, void 0, void 0, function () {
329
+ return __generator(this, function (_a) {
330
+ switch (_a.label) {
331
+ case 0:
332
+ this.pause();
333
+ return [4, this.onceWSConnected()];
334
+ case 1:
335
+ _a.sent();
336
+ retry(true);
337
+ return [2];
338
+ }
339
+ });
340
+ }); };
341
+ if (!!this.isWSConnected()) return [3, 2];
342
+ return [4, onWSDisconnected()];
343
+ case 1:
344
+ _a.sent();
345
+ return [3, 7];
346
+ case 2: return [4, sleep(DEFAULT_WAIT_TIME_ON_UNKNOWN_ERROR)];
347
+ case 3:
348
+ _a.sent();
349
+ if (!(this.watchStatus === WatchStatus.PAUSED)) return [3, 4];
350
+ options.reject(new CancelledError("".concat(options.operationName, " cancelled due to pause after unknownError")));
351
+ return [3, 7];
352
+ case 4:
353
+ if (!!this.isWSConnected()) return [3, 6];
354
+ return [4, onWSDisconnected()];
355
+ case 5:
356
+ _a.sent();
357
+ return [3, 7];
358
+ case 6:
359
+ retry(false);
360
+ _a.label = 7;
361
+ case 7: return [3, 9];
362
+ case 8:
363
+ e_3 = _a.sent();
364
+ retry(true);
365
+ return [3, 9];
366
+ case 9: return [2];
367
+ }
368
+ });
369
+ }); })();
370
+ },
371
+ });
372
+ return [2];
373
+ });
374
+ }); };
375
+ this.closeWatch = function () { return __awaiter(_this, void 0, void 0, function () {
376
+ var queryId, closeWatchMsg, e_4;
377
+ return __generator(this, function (_a) {
378
+ switch (_a.label) {
379
+ case 0:
380
+ queryId = this.sessionInfo ? this.sessionInfo.queryID : '';
381
+ if (this.watchStatus !== WatchStatus.ACTIVE) {
382
+ this.watchStatus = WatchStatus.CLOSED;
383
+ this.onWatchClose(this, queryId);
384
+ return [2];
385
+ }
386
+ _a.label = 1;
387
+ case 1:
388
+ _a.trys.push([1, 3, 4, 5]);
389
+ this.watchStatus = WatchStatus.CLOSING;
390
+ closeWatchMsg = {
391
+ watchId: this.watchId,
392
+ requestId: genRequestId(),
393
+ msgType: 'CLOSE_WATCH',
394
+ msgData: null,
395
+ };
396
+ return [4, this.send({
397
+ msg: closeWatchMsg,
398
+ })];
399
+ case 2:
400
+ _a.sent();
401
+ this.sessionInfo = undefined;
402
+ this.watchStatus = WatchStatus.CLOSED;
403
+ return [3, 5];
404
+ case 3:
405
+ e_4 = _a.sent();
406
+ this.closeWithError(new CloudSDKError({
407
+ errCode: ERR_CODE.SDK_DATABASE_REALTIME_LISTENER_CLOSE_WATCH_FAIL,
408
+ errMsg: e_4,
409
+ }));
410
+ return [3, 5];
411
+ case 4:
412
+ this.onWatchClose(this, queryId);
413
+ return [7];
414
+ case 5: return [2];
415
+ }
416
+ });
417
+ }); };
418
+ this.scheduleSendACK = function () {
419
+ _this.clearACKSchedule();
420
+ _this.ackTimeoutId = setTimeout(function () {
421
+ if (_this.waitExpectedTimeoutId) {
422
+ _this.scheduleSendACK();
423
+ }
424
+ else {
425
+ _this.sendACK();
426
+ }
427
+ }, DEFAULT_SEND_ACK_DEBOUNCE_TIMEOUT);
428
+ };
429
+ this.clearACKSchedule = function () {
430
+ if (_this.ackTimeoutId) {
431
+ clearTimeout(_this.ackTimeoutId);
432
+ }
433
+ };
434
+ this.sendACK = function () { return __awaiter(_this, void 0, void 0, function () {
435
+ var ackMsg, e_5, msg;
436
+ return __generator(this, function (_a) {
437
+ switch (_a.label) {
438
+ case 0:
439
+ _a.trys.push([0, 2, , 3]);
440
+ if (this.watchStatus !== WatchStatus.ACTIVE) {
441
+ this.scheduleSendACK();
442
+ return [2];
443
+ }
444
+ if (!this.sessionInfo) {
445
+ console.warn('[realtime listener] can not send ack without a successful initWatch (lack of sessionInfo)');
446
+ return [2];
447
+ }
448
+ ackMsg = {
449
+ watchId: this.watchId,
450
+ requestId: genRequestId(),
451
+ msgType: 'CHECK_LAST',
452
+ msgData: {
453
+ queryID: this.sessionInfo.queryID,
454
+ eventID: this.sessionInfo.currentEventId,
455
+ },
456
+ };
457
+ return [4, this.send({
458
+ msg: ackMsg,
459
+ })];
460
+ case 1:
461
+ _a.sent();
462
+ this.scheduleSendACK();
463
+ return [3, 3];
464
+ case 2:
465
+ e_5 = _a.sent();
466
+ if (isRealtimeErrorMessageError(e_5)) {
467
+ msg = e_5.payload;
468
+ switch (msg.msgData.code) {
469
+ case 'CHECK_LOGIN_FAILED':
470
+ case 'SIGN_EXPIRED_ERROR':
471
+ case 'SIGN_INVALID_ERROR':
472
+ case 'SIGN_PARAM_INVALID': {
473
+ this.rebuildWatch();
474
+ return [2];
475
+ }
476
+ case 'QUERYID_INVALID_ERROR':
477
+ case 'SYS_ERR':
478
+ case 'INVALIID_ENV':
479
+ case 'COLLECTION_PERMISSION_DENIED': {
480
+ this.closeWithError(new CloudSDKError({
481
+ errCode: ERR_CODE.SDK_DATABASE_REALTIME_LISTENER_CHECK_LAST_FAIL,
482
+ errMsg: msg.msgData.code,
483
+ }));
484
+ return [2];
485
+ }
486
+ default: {
487
+ break;
488
+ }
489
+ }
490
+ }
491
+ if (this.availableRetries.CHECK_LAST
492
+ && this.availableRetries.CHECK_LAST > 0) {
493
+ this.availableRetries.CHECK_LAST -= 1;
494
+ this.scheduleSendACK();
495
+ }
496
+ else {
497
+ this.closeWithError(new CloudSDKError({
498
+ errCode: ERR_CODE.SDK_DATABASE_REALTIME_LISTENER_CHECK_LAST_FAIL,
499
+ errMsg: e_5,
500
+ }));
501
+ }
502
+ return [3, 3];
503
+ case 3: return [2];
504
+ }
505
+ });
506
+ }); };
507
+ this.handleCommonError = function (e, options) {
508
+ if (isRealtimeErrorMessageError(e)) {
509
+ var msg = e.payload;
510
+ switch (msg.msgData.code) {
511
+ case 'CHECK_LOGIN_FAILED':
512
+ case 'SIGN_EXPIRED_ERROR':
513
+ case 'SIGN_INVALID_ERROR':
514
+ case 'SIGN_PARAM_INVALID': {
515
+ options.onSignError(e);
516
+ return;
517
+ }
518
+ case 'QUERYID_INVALID_ERROR':
519
+ case 'SYS_ERR':
520
+ case 'INVALIID_ENV':
521
+ case 'COLLECTION_PERMISSION_DENIED': {
522
+ options.onNotRetryableError(e);
523
+ return;
524
+ }
525
+ default: {
526
+ options.onNotRetryableError(e);
527
+ return;
528
+ }
529
+ }
530
+ }
531
+ else if (isTimeoutError(e)) {
532
+ options.onTimeoutError(e);
533
+ return;
534
+ }
535
+ else if (isCancelledError(e)) {
536
+ options.onCancelledError(e);
537
+ return;
538
+ }
539
+ options.onUnknownError(e);
540
+ };
541
+ this.watchId = "watchid_".concat(+new Date(), "_").concat(Math.random());
542
+ this.envId = options.envId;
543
+ this.collectionName = options.collectionName;
544
+ this.query = options.query;
545
+ this.limit = options.limit;
546
+ this.orderBy = options.orderBy;
547
+ this.send = options.send;
548
+ this.login = options.login;
549
+ this.isWSConnected = options.isWSConnected;
550
+ this.onceWSConnected = options.onceWSConnected;
551
+ this.getWaitExpectedTimeoutLength = options.getWaitExpectedTimeoutLength;
552
+ this.onWatchStart = options.onWatchStart;
553
+ this.onWatchClose = options.onWatchClose;
554
+ this.debug = options.debug;
555
+ this.availableRetries = {
556
+ INIT_WATCH: DEFAULT_MAX_AUTO_RETRY_ON_ERROR,
557
+ REBUILD_WATCH: DEFAULT_MAX_AUTO_RETRY_ON_ERROR,
558
+ CHECK_LAST: DEFAULT_MAX_SEND_ACK_AUTO_RETRY_ON_ERROR,
559
+ };
560
+ this.listener = new RealtimeListener({
561
+ close: function () {
562
+ _this.closeWatch();
563
+ },
564
+ onChange: options.onChange,
565
+ onError: options.onError,
566
+ debug: this.debug,
567
+ virtualClient: this,
568
+ });
569
+ this.initWatch();
570
+ }
571
+ VirtualWebSocketClient.prototype.onMessage = function (msg) {
572
+ var _this = this;
573
+ switch (this.watchStatus) {
574
+ case WatchStatus.PAUSED: {
575
+ if (msg.msgType !== 'ERROR') {
576
+ return;
577
+ }
578
+ break;
579
+ }
580
+ case WatchStatus.LOGGINGIN:
581
+ case WatchStatus.INITING:
582
+ case WatchStatus.REBUILDING: {
583
+ console.warn("[realtime listener] internal non-fatal error: unexpected message received while ".concat(this.watchStatus));
584
+ return;
585
+ }
586
+ case WatchStatus.CLOSED: {
587
+ console.warn('[realtime listener] internal non-fatal error: unexpected message received when the watch has closed');
588
+ return;
589
+ }
590
+ case WatchStatus.ERRORED: {
591
+ console.warn('[realtime listener] internal non-fatal error: unexpected message received when the watch has ended with error');
592
+ return;
593
+ }
594
+ }
595
+ if (!this.sessionInfo) {
596
+ console.warn('[realtime listener] internal non-fatal error: sessionInfo not found while message is received.');
597
+ return;
598
+ }
599
+ this.scheduleSendACK();
600
+ switch (msg.msgType) {
601
+ case 'NEXT_EVENT': {
602
+ console.warn("nextevent ".concat(msg.msgData.currEvent, " ignored"), msg);
603
+ this.handleServerEvents(msg);
604
+ break;
605
+ }
606
+ case 'CHECK_EVENT': {
607
+ if (this.sessionInfo.currentEventId < msg.msgData.currEvent) {
608
+ this.sessionInfo.expectEventId = msg.msgData.currEvent;
609
+ this.clearWaitExpectedEvent();
610
+ this.waitExpectedTimeoutId = setTimeout(function () {
611
+ _this.rebuildWatch();
612
+ }, this.getWaitExpectedTimeoutLength());
613
+ console.log("[realtime] waitExpectedTimeoutLength ".concat(this.getWaitExpectedTimeoutLength()));
614
+ }
615
+ break;
616
+ }
617
+ case 'ERROR': {
618
+ this.closeWithError(new CloudSDKError({
619
+ errCode: ERR_CODE.SDK_DATABASE_REALTIME_LISTENER_SERVER_ERROR_MSG,
620
+ errMsg: "".concat(msg.msgData.code, " - ").concat(msg.msgData.message),
621
+ }));
622
+ break;
623
+ }
624
+ default: {
625
+ console.warn("[realtime listener] virtual client receive unexpected msg ".concat(msg.msgType, ": "), msg);
626
+ break;
627
+ }
628
+ }
629
+ };
630
+ VirtualWebSocketClient.prototype.closeWithError = function (error) {
631
+ var _a;
632
+ this.watchStatus = WatchStatus.ERRORED;
633
+ this.clearACKSchedule();
634
+ this.listener.onError(error);
635
+ this.onWatchClose(this, ((_a = this.sessionInfo) === null || _a === void 0 ? void 0 : _a.queryID) || '');
636
+ console.log("[realtime] client closed (".concat(this.collectionName, " ").concat(this.query, ") (watchId ").concat(this.watchId, ")"));
637
+ };
638
+ VirtualWebSocketClient.prototype.pause = function () {
639
+ this.watchStatus = WatchStatus.PAUSED;
640
+ console.log("[realtime] client paused (".concat(this.collectionName, " ").concat(this.query, ") (watchId ").concat(this.watchId, ")"));
641
+ };
642
+ VirtualWebSocketClient.prototype.resume = function () {
643
+ return __awaiter(this, void 0, void 0, function () {
644
+ var e_6;
645
+ return __generator(this, function (_a) {
646
+ switch (_a.label) {
647
+ case 0:
648
+ this.watchStatus = WatchStatus.RESUMING;
649
+ console.log("[realtime] client resuming with ".concat(this.sessionInfo ? 'REBUILD_WATCH' : 'INIT_WATCH', " (").concat(this.collectionName, " ").concat(this.query, ") (").concat(this.watchId, ")"));
650
+ _a.label = 1;
651
+ case 1:
652
+ _a.trys.push([1, 3, , 4]);
653
+ return [4, (this.sessionInfo ? this.rebuildWatch() : this.initWatch())];
654
+ case 2:
655
+ _a.sent();
656
+ console.log("[realtime] client successfully resumed (".concat(this.collectionName, " ").concat(this.query, ") (").concat(this.watchId, ")"));
657
+ return [3, 4];
658
+ case 3:
659
+ e_6 = _a.sent();
660
+ console.error("[realtime] client resume failed (".concat(this.collectionName, " ").concat(this.query, ") (").concat(this.watchId, ")"), e_6);
661
+ return [3, 4];
662
+ case 4: return [2];
663
+ }
664
+ });
665
+ });
666
+ };
667
+ VirtualWebSocketClient.prototype.useRetryTicket = function (operationName) {
668
+ if (this.availableRetries[operationName]
669
+ && this.availableRetries[operationName] > 0) {
670
+ this.availableRetries[operationName] -= 1;
671
+ console.log("[realtime] ".concat(operationName, " use a retry ticket, now only ").concat(this.availableRetries[operationName], " retry left"));
672
+ return true;
673
+ }
674
+ return false;
675
+ };
676
+ VirtualWebSocketClient.prototype.handleServerEvents = function (msg) {
677
+ return __awaiter(this, void 0, void 0, function () {
678
+ var e_7;
679
+ return __generator(this, function (_a) {
680
+ switch (_a.label) {
681
+ case 0:
682
+ _a.trys.push([0, 2, , 3]);
683
+ this.scheduleSendACK();
684
+ return [4, this.handleServerEventsInternel(msg)];
685
+ case 1:
686
+ _a.sent();
687
+ this.postHandleServerEventsValidityCheck(msg);
688
+ return [3, 3];
689
+ case 2:
690
+ e_7 = _a.sent();
691
+ console.error('[realtime listener] internal non-fatal error: handle server events failed with error: ', e_7);
692
+ throw e_7;
693
+ case 3: return [2];
694
+ }
695
+ });
696
+ });
697
+ };
698
+ VirtualWebSocketClient.prototype.handleServerEventsInternel = function (msg) {
699
+ return __awaiter(this, void 0, void 0, function () {
700
+ var requestId, events, msgType, sessionInfo, allChangeEvents, docs, initEncountered, _loop_1, this_1, i, len, state_1;
701
+ return __generator(this, function (_a) {
702
+ switch (_a.label) {
703
+ case 0:
704
+ requestId = msg.requestId;
705
+ events = msg.msgData.events;
706
+ msgType = msg.msgType;
707
+ if (!events.length || !this.sessionInfo) {
708
+ return [2];
709
+ }
710
+ sessionInfo = this.sessionInfo;
711
+ try {
712
+ allChangeEvents = events.map(getPublicEvent);
713
+ }
714
+ catch (e) {
715
+ this.closeWithError(new CloudSDKError({
716
+ errCode: ERR_CODE.SDK_DATABASE_REALTIME_LISTENER_RECEIVE_INVALID_SERVER_DATA,
717
+ errMsg: e,
718
+ }));
719
+ return [2];
720
+ }
721
+ docs = __spreadArray([], sessionInfo.currentDocs, true);
722
+ initEncountered = false;
723
+ _loop_1 = function (i, len) {
724
+ var change, localDoc, doc_1, _i, _b, fieldPath, err, err, doc, doc, err, ind, ind, docsSnapshot, docChanges, snapshot;
725
+ return __generator(this, function (_c) {
726
+ switch (_c.label) {
727
+ case 0:
728
+ change = allChangeEvents[i];
729
+ if (!(sessionInfo.currentEventId >= change.id)) return [3, 1];
730
+ if (!allChangeEvents[i - 1] || change.id > allChangeEvents[i - 1].id) {
731
+ console.warn("[realtime] duplicate event received, cur ".concat(sessionInfo.currentEventId, " but got ").concat(change.id));
732
+ }
733
+ else {
734
+ console.error("[realtime listener] server non-fatal error: events out of order (the latter event's id is smaller than that of the former) (requestId ".concat(requestId, ")"));
735
+ }
736
+ return [2, "continue"];
737
+ case 1:
738
+ if (!(sessionInfo.currentEventId === change.id - 1)) return [3, 2];
739
+ switch (change.dataType) {
740
+ case 'update': {
741
+ if (!change.doc) {
742
+ switch (change.queueType) {
743
+ case 'update':
744
+ case 'dequeue': {
745
+ localDoc = docs.find(function (doc) { return doc._id === change.docId; });
746
+ if (localDoc) {
747
+ doc_1 = cloneDeep(localDoc);
748
+ if (change.updatedFields) {
749
+ Object.keys(change.updatedFields).forEach(function (fieldPath) {
750
+ set(doc_1, fieldPath, change.updatedFields[fieldPath]);
751
+ });
752
+ }
753
+ if (change.removedFields) {
754
+ for (_i = 0, _b = change.removedFields; _i < _b.length; _i++) {
755
+ fieldPath = _b[_i];
756
+ unset(doc_1, fieldPath);
757
+ }
758
+ }
759
+ change.doc = doc_1;
760
+ }
761
+ else {
762
+ console.error('[realtime listener] internal non-fatal server error: unexpected update dataType event where no doc is associated.');
763
+ }
764
+ break;
765
+ }
766
+ case 'enqueue': {
767
+ err = new CloudSDKError({
768
+ errCode: ERR_CODE.SDK_DATABASE_REALTIME_LISTENER_UNEXPECTED_FATAL_ERROR,
769
+ errMsg: "HandleServerEvents: full doc is not provided with dataType=\"update\" and queueType=\"enqueue\" (requestId ".concat(msg.requestId, ")"),
770
+ });
771
+ this_1.closeWithError(err);
772
+ throw err;
773
+ }
774
+ default: {
775
+ break;
776
+ }
777
+ }
778
+ }
779
+ break;
780
+ }
781
+ case 'replace': {
782
+ if (!change.doc) {
783
+ err = new CloudSDKError({
784
+ errCode: ERR_CODE.SDK_DATABASE_REALTIME_LISTENER_UNEXPECTED_FATAL_ERROR,
785
+ errMsg: "HandleServerEvents: full doc is not provided with dataType=\"replace\" (requestId ".concat(msg.requestId, ")"),
786
+ });
787
+ this_1.closeWithError(err);
788
+ throw err;
789
+ }
790
+ break;
791
+ }
792
+ case 'remove': {
793
+ doc = docs.find(function (doc) { return doc._id === change.docId; });
794
+ if (doc) {
795
+ change.doc = doc;
796
+ }
797
+ else {
798
+ console.error('[realtime listener] internal non-fatal server error: unexpected remove event where no doc is associated.');
799
+ }
800
+ break;
801
+ }
802
+ case 'limit': {
803
+ if (!change.doc) {
804
+ switch (change.queueType) {
805
+ case 'dequeue': {
806
+ doc = docs.find(function (doc) { return doc._id === change.docId; });
807
+ if (doc) {
808
+ change.doc = doc;
809
+ }
810
+ else {
811
+ console.error('[realtime listener] internal non-fatal server error: unexpected limit dataType event where no doc is associated.');
812
+ }
813
+ break;
814
+ }
815
+ case 'enqueue': {
816
+ err = new CloudSDKError({
817
+ errCode: ERR_CODE.SDK_DATABASE_REALTIME_LISTENER_UNEXPECTED_FATAL_ERROR,
818
+ errMsg: "HandleServerEvents: full doc is not provided with dataType=\"limit\" and queueType=\"enqueue\" (requestId ".concat(msg.requestId, ")"),
819
+ });
820
+ this_1.closeWithError(err);
821
+ throw err;
822
+ }
823
+ default: {
824
+ break;
825
+ }
826
+ }
827
+ }
828
+ break;
829
+ }
830
+ }
831
+ switch (change.queueType) {
832
+ case 'init': {
833
+ if (!initEncountered) {
834
+ initEncountered = true;
835
+ docs = [change.doc];
836
+ }
837
+ else {
838
+ docs.push(change.doc);
839
+ }
840
+ break;
841
+ }
842
+ case 'enqueue': {
843
+ docs.push(change.doc);
844
+ break;
845
+ }
846
+ case 'dequeue': {
847
+ ind = docs.findIndex(function (doc) { return doc._id === change.docId; });
848
+ if (ind > -1) {
849
+ docs.splice(ind, 1);
850
+ }
851
+ else {
852
+ console.error('[realtime listener] internal non-fatal server error: unexpected dequeue event where no doc is associated.');
853
+ }
854
+ break;
855
+ }
856
+ case 'update': {
857
+ ind = docs.findIndex(function (doc) { return doc._id === change.docId; });
858
+ if (ind > -1) {
859
+ docs[ind] = change.doc;
860
+ }
861
+ else {
862
+ console.error('[realtime listener] internal non-fatal server error: unexpected queueType update event where no doc is associated.');
863
+ }
864
+ break;
865
+ }
866
+ }
867
+ if (i === len - 1
868
+ || (allChangeEvents[i + 1] && allChangeEvents[i + 1].id !== change.id)) {
869
+ docsSnapshot = __spreadArray([], docs, true);
870
+ docChanges = allChangeEvents
871
+ .slice(0, i + 1)
872
+ .filter(function (c) { return c.id === change.id; });
873
+ this_1.sessionInfo.currentEventId = change.id;
874
+ this_1.sessionInfo.currentDocs = docs;
875
+ snapshot = new Snapshot({
876
+ id: change.id,
877
+ docChanges: docChanges,
878
+ docs: docsSnapshot,
879
+ msgType: msgType,
880
+ });
881
+ this_1.listener.onChange(snapshot);
882
+ }
883
+ return [3, 4];
884
+ case 2:
885
+ console.warn("[realtime listener] event received is out of order, cur ".concat(this_1.sessionInfo.currentEventId, " but got ").concat(change.id));
886
+ return [4, this_1.rebuildWatch()];
887
+ case 3:
888
+ _c.sent();
889
+ return [2, { value: void 0 }];
890
+ case 4: return [2];
891
+ }
892
+ });
893
+ };
894
+ this_1 = this;
895
+ i = 0, len = allChangeEvents.length;
896
+ _a.label = 1;
897
+ case 1:
898
+ if (!(i < len)) return [3, 4];
899
+ return [5, _loop_1(i, len)];
900
+ case 2:
901
+ state_1 = _a.sent();
902
+ if (typeof state_1 === "object")
903
+ return [2, state_1.value];
904
+ _a.label = 3;
905
+ case 3:
906
+ i++;
907
+ return [3, 1];
908
+ case 4: return [2];
909
+ }
910
+ });
911
+ });
912
+ };
913
+ VirtualWebSocketClient.prototype.postHandleServerEventsValidityCheck = function (msg) {
914
+ if (!this.sessionInfo) {
915
+ console.error('[realtime listener] internal non-fatal error: sessionInfo lost after server event handling, this should never occur');
916
+ return;
917
+ }
918
+ if (this.sessionInfo.expectEventId
919
+ && this.sessionInfo.currentEventId >= this.sessionInfo.expectEventId) {
920
+ this.clearWaitExpectedEvent();
921
+ }
922
+ if (this.sessionInfo.currentEventId < msg.msgData.currEvent) {
923
+ console.warn('[realtime listener] internal non-fatal error: client eventId does not match with server event id after server event handling');
924
+ return;
925
+ }
926
+ };
927
+ VirtualWebSocketClient.prototype.clearWaitExpectedEvent = function () {
928
+ if (this.waitExpectedTimeoutId) {
929
+ clearTimeout(this.waitExpectedTimeoutId);
930
+ this.waitExpectedTimeoutId = undefined;
931
+ }
932
+ };
933
+ return VirtualWebSocketClient;
934
+ }());
935
+ export { VirtualWebSocketClient };
936
+ function getPublicEvent(event) {
937
+ var e = {
938
+ id: event.ID,
939
+ dataType: event.DataType,
940
+ queueType: event.QueueType,
941
+ docId: event.DocID,
942
+ doc: event.Doc && event.Doc !== '{}' ? JSON.parse(event.Doc) : undefined,
943
+ };
944
+ if (event.DataType === 'update') {
945
+ if (event.UpdatedFields) {
946
+ e.updatedFields = JSON.parse(event.UpdatedFields);
947
+ }
948
+ if (event.removedFields || event.RemovedFields) {
949
+ e.removedFields = JSON.parse(event.removedFields);
950
+ }
951
+ }
952
+ return e;
953
+ }
954
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC13ZWJzb2NrZXQtY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZpcnR1YWwtd2Vic29ja2V0LWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUE7QUFDNUIsT0FBTyxLQUFLLE1BQU0sY0FBYyxDQUFBO0FBQ2hDLE9BQU8sU0FBUyxNQUFNLGtCQUFrQixDQUFBO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFnQnhDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUM3QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRXJDLE9BQU8sRUFDTCxRQUFRLEVBQ1IsYUFBYSxFQUNiLGNBQWMsRUFDZCxjQUFjLEVBQ2QsZ0JBQWdCLEVBQ2hCLDJCQUEyQixHQUc1QixNQUFNLFNBQVMsQ0FBQTtBQUNoQixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBeUMvQixJQUFLLFdBVUo7QUFWRCxXQUFLLFdBQVc7SUFDZCxzQ0FBdUIsQ0FBQTtJQUN2QixrQ0FBbUIsQ0FBQTtJQUNuQix3Q0FBeUIsQ0FBQTtJQUN6QixnQ0FBaUIsQ0FBQTtJQUNqQixrQ0FBbUIsQ0FBQTtJQUNuQixrQ0FBbUIsQ0FBQTtJQUNuQixnQ0FBaUIsQ0FBQTtJQUNqQixnQ0FBaUIsQ0FBQTtJQUNqQixvQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBVkksV0FBVyxLQUFYLFdBQVcsUUFVZjtBQUVELElBQU0sa0NBQWtDLEdBQUcsR0FBRyxDQUFBO0FBQzlDLElBQU0sK0JBQStCLEdBQUcsQ0FBQyxDQUFBO0FBQ3pDLElBQU0sd0NBQXdDLEdBQUcsQ0FBQyxDQUFBO0FBQ2xELElBQU0saUNBQWlDLEdBQUcsRUFBRSxH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QUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUM5QixZQUFZLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUE7WUFDeEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFNBQVMsQ0FBQTtTQUN2QztJQUNILENBQUM7SUFDSCw2QkFBQztBQUFELENBQUMsQUE5MkJELElBODJCQzs7QUFFRCxTQUFTLGNBQWMsQ0FBQyxLQUFlO0lBQ3JDLElBQU0sQ0FBQyxHQUFtQjtRQUN4QixFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFDWixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7UUFDeEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1FBQzFCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztRQUNsQixHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7S0FDekUsQ0FBQTtJQUVELElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUU7UUFFL0IsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLENBQUMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUE7U0FDbEQ7UUFHRCxJQUFJLEtBQUssQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRTtZQUs5QyxDQUFDLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1NBQ2xEO0tBQ0Y7SUFFRCxPQUFPLENBQUMsQ0FBQTtBQUNWLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2V0IGZyb20gJ2xvZGFzaC9zZXQnXG5pbXBvcnQgdW5zZXQgZnJvbSAnbG9kYXNoL3Vuc2V0J1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJ1xuaW1wb3J0IHsgZ2VuUmVxdWVzdElkIH0gZnJvbSAnLi9tZXNzYWdlJ1xuaW1wb3J0IHtcbiAgSVJlc3BvbnNlTWVzc2FnZSxcbiAgSVJlcXVlc3RNZXNzYWdlSW5pdFdhdGNoTXNnLFxuICBJUmVzcG9uc2VNZXNzYWdlSW5pdEV2ZW50TXNnLFxuICBJREJFdmVudCxcbiAgSVJlcXVlc3RNZXNzYWdlUmVidWlsZFdhdGNoTXNnLFxuICBJUmVxdWVzdE1lc3NhZ2VDbG9zZVdhdGNoTXNnLFxuICBJUmVxdWVzdE1zZ1R5cGUsXG4gIElSZXNwb25zZU1lc3NhZ2VOZXh0RXZlbnRNc2csXG4gIElSZXF1ZXN0TWVzc2FnZUNoZWNrTGFzdE1zZyxcbiAgSVdhdGNoT3B0aW9ucyxcbn0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9yZWFsdGltZSdcbmltcG9ydCB7XG4gIElTaW5nbGVEQkV2ZW50LFxufSBmcm9tICdAY2xvdWRiYXNlL3R5cGVzL2RhdGFiYXNlJ1xuaW1wb3J0IHsgUmVhbHRpbWVMaXN0ZW5lciB9IGZyb20gJy4vbGlzdGVuZXInXG5pbXBvcnQgeyBTbmFwc2hvdCB9IGZyb20gJy4vc25hcHNob3QnXG5pbXBvcnQgeyBJV1NTZW5kT3B0aW9ucywgSUxvZ2luUmVzdWx0IH0gZnJvbSAnLi93ZWJzb2NrZXQtY2xpZW50J1xuaW1wb3J0IHtcbiAgRVJSX0NPREUsXG4gIENsb3VkU0RLRXJyb3IsXG4gIGlzVGltZW91dEVycm9yLFxuICBDYW5jZWxsZWRFcnJvcixcbiAgaXNDYW5jZWxsZWRFcnJvcixcbiAgaXNSZWFsdGltZUVycm9yTWVzc2FnZUVycm9yLFxuICBSZWFsdGltZUVycm9yTWVzc2FnZUVycm9yLFxuICBUaW1lb3V0RXJyb3IsXG59IGZyb20gJy4vZXJyb3InXG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gJy4vdXRpbHMnXG5cbi8vID09PT09PT09PT09PT09PSBSZWFsdGltZSBWaXJ0dWFsIFdlYlNvY2tldCBDbGllbnQgKEludGVybmFsKSA9PT09PT09PT09PT09PT09PT09PVxuXG5pbnRlcmZhY2UgSVZpcnR1YWxXZWJTb2NrZXRDbGllbnRDb25zdHJ1Y3Rvck9wdGlvbnMgZXh0ZW5kcyBJV2F0Y2hPcHRpb25zIHtcbiAgZW52SWQ/OiBzdHJpbmdcbiAgY29sbGVjdGlvbk5hbWU6IHN0cmluZ1xuICBxdWVyeTogc3RyaW5nXG4gIGxpbWl0PzogbnVtYmVyXG4gIG9yZGVyQnk/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gIHNlbmQ6IDxUID0gYW55PihvcHRzOiBJV1NTZW5kT3B0aW9ucykgPT4gUHJvbWlzZTxUPlxuICBsb2dpbjogKGVudklkPzogc3RyaW5nLCByZWZyZXNoPzogYm9vbGVhbikgPT4gUHJvbWlzZTxhbnk+XG4gIGlzV1NDb25uZWN0ZWQ6ICgpID0+IGJvb2xlYW5cbiAgb25jZVdTQ29ubmVjdGVkOiAoKSA9PiBQcm9taXNlPHZvaWQ+XG4gIGdldFdhaXRFeHBlY3RlZFRpbWVvdXRMZW5ndGg6ICgpID0+IG51bWJlclxuICBvbldhdGNoU3RhcnQ6IChjbGllbnQ6IFZpcnR1YWxXZWJTb2NrZXRDbGllbnQsIHF1ZXJ5SUQ6IHN0cmluZykgPT4gdm9pZFxuICBvbldhdGNoQ2xvc2U6IChjbGllbnQ6IFZpcnR1YWxXZWJTb2NrZXRDbGllbnQsIHF1ZXJ5SUQ6IHN0cmluZykgPT4gdm9pZFxuICBkZWJ1Zz86IGJvb2xlYW5cbn1cblxuaW50ZXJmYWNlIElXYXRjaFNlc3Npb25JbmZvIHtcbiAgcXVlcnlJRDogc3RyaW5nXG4gIGN1cnJlbnRFdmVudElkOiBudW1iZXJcbiAgY3VycmVudERvY3M6IFJlY29yZDxzdHJpbmcsIGFueT5bXVxuICBleHBlY3RFdmVudElkPzogbnVtYmVyXG59XG5cbmludGVyZmFjZSBJSGFuZGxlQ29tbW9uRXJyb3JPcHRpb25zIHtcbiAgb25TaWduRXJyb3I6IChlOiBSZWFsdGltZUVycm9yTWVzc2FnZUVycm9yKSA9PiB2b2lkXG4gIG9uVGltZW91dEVycm9yOiAoZTogVGltZW91dEVycm9yKSA9PiB2b2lkXG4gIG9uQ2FuY2VsbGVkRXJyb3I6IChlOiBDYW5jZWxsZWRFcnJvcikgPT4gdm9pZFxuICBvbk5vdFJldHJ5YWJsZUVycm9yOiAoZTogUmVhbHRpbWVFcnJvck1lc3NhZ2VFcnJvcikgPT4gdm9pZFxuICBvblVua25vd25FcnJvcjogKGU6IGFueSkgPT4gdm9pZFxufVxuXG5pbnRlcmZhY2UgSUhhbmRsZVdhdGNoRXN0YWJsaXNobWVudEVycm9yT3B0aW9ucyB7XG4gIG9wZXJhdGlvbk5hbWU6ICdJTklUX1dBVENIJyB8ICdSRUJVSUxEX1dBVENIJ1xuICByZXNvbHZlOiAodmFsdWU/OiBQcm9taXNlTGlrZTx2b2lkPiB8IHVuZGVmaW5lZCkgPT4gdm9pZFxuICByZWplY3Q6IChlOiBhbnkpID0+IHZvaWRcbn1cblxuZW51bSBXYXRjaFN0YXR1cyB7XG4gIExPR0dJTkdJTiA9ICdMT0dHSU5HSU4nLFxuICBJTklUSU5HID0gJ0lOSVRJTkcnLFxuICBSRUJVSUxESU5HID0gJ1JFQlVJTERJTkcnLFxuICBBQ1RJVkUgPSAnQUNUSVZFJyxcbiAgRVJST1JFRCA9ICdFUlJPUkVEJyxcbiAgQ0xPU0lORyA9ICdDTE9TSU5HJyxcbiAgQ0xPU0VEID0gJ0NMT1NFRCcsXG4gIFBBVVNFRCA9ICdQQVVTRUQnLFxuICBSRVNVTUlORyA9ICdSRVNVTUlORydcbn1cblxuY29uc3QgREVGQVVMVF9XQUlUX1RJTUVfT05fVU5LTk9XTl9FUlJPUiA9IDEwMFxuY29uc3QgREVGQVVMVF9NQVhfQVVUT19SRVRSWV9PTl9FUlJPUiA9IDJcbmNvbnN0IERFRkFVTFRfTUFYX1NFTkRfQUNLX0FVVE9fUkVUUllfT05fRVJST1IgPSAyXG5jb25zdCBERUZBVUxUX1NFTkRfQUNLX0RFQk9VTkNFX1RJTUVPVVQgPSAxMCAqIDEwMDBcbmNvbnN0IERFRkFVTFRfSU5JVF9XQVRDSF9USU1FT1VUID0gMTAgKiAxMDAwXG5jb25zdCBERUZBVUxUX1JFQlVJTERfV0FUQ0hfVElNRU9VVCA9IDEwICogMTAwMFxuXG5leHBvcnQgY2xhc3MgVmlydHVhbFdlYlNvY2tldENsaWVudCB7XG4gIC8vIHBhc3NlZCBvdmVyXG4gIHdhdGNoSWQ6IHN0cmluZ1xuICAvLyBvd25cbiAgbGlzdGVuZXI6IFJlYWx0aW1lTGlzdGVuZXJcbiAgcHJpdmF0ZSBlbnZJZD86IHN0cmluZ1xuICBwcml2YXRlIGNvbGxlY3Rpb25OYW1lOiBzdHJpbmdcbiAgcHJpdmF0ZSBxdWVyeTogc3RyaW5nXG4gIHByaXZhdGUgbGltaXQ6IG51bWJlclxuICBwcml2YXRlIG9yZGVyQnk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgcHJpdmF0ZSBzZW5kOiA8VCA9IGFueT4ob3B0czogSVdTU2VuZE9wdGlvbnMpID0+IFByb21pc2U8VD5cbiAgcHJpdmF0ZSBsb2dpbjogKGVudklkPzogc3RyaW5nLCByZWZyZXNoPzogYm9vbGVhbikgPT4gUHJvbWlzZTxhbnk+XG4gIHByaXZhdGUgaXNXU0Nvbm5lY3RlZDogKCkgPT4gYm9vbGVhblxuICBwcml2YXRlIG9uY2VXU0Nvbm5lY3RlZDogKCkgPT4gUHJvbWlzZTx2b2lkPlxuICBwcml2YXRlIGdldFdhaXRFeHBlY3RlZFRpbWVvdXRMZW5ndGg6ICgpID0+IG51bWJlclxuICBwcml2YXRlIG9uV2F0Y2hTdGFydDogKFxuICAgIGNsaWVudDogVmlydHVhbFdlYlNvY2tldENsaWVudCxcbiAgICBxdWVyeUlEOiBzdHJpbmdcbiAgKSA9PiB2b2lkXG4gIHByaXZhdGUgb25XYXRjaENsb3NlOiAoXG4gICAgY2xpZW50OiBWaXJ0dWFsV2ViU29ja2V0Q2xpZW50LFxuICAgIHF1ZXJ5SUQ6IHN0cmluZ1xuICApID0+IHZvaWRcbiAgcHJpdmF0ZSBkZWJ1Zz86IGJvb2xlYW5cblxuICBwcml2YXRlIHdhdGNoU3RhdHVzOiBXYXRjaFN0YXR1cyA9IFdhdGNoU3RhdHVzLklOSVRJTkdcbiAgcHJpdmF0ZSBhdmFpbGFibGVSZXRyaWVzOiBQYXJ0aWFsPFJlY29yZDxJUmVxdWVzdE1zZ1R5cGUsIG51bWJlcj4+XG4gIHByaXZhdGUgYWNrVGltZW91dElkPzogbnVtYmVyXG4gIHByaXZhdGUgaW5pdFdhdGNoUHJvbWlzZT86IFByb21pc2U8dm9pZD5cbiAgcHJpdmF0ZSByZWJ1aWxkV2F0Y2hQcm9taXNlPzogUHJvbWlzZTx2b2lkPlxuXG4gIC8vIG9idGFpbmVkXG4gIHByaXZhdGUgc2Vzc2lvbkluZm8/OiBJV2F0Y2hTZXNzaW9uSW5mb1xuXG4gIC8vIGludGVybmFsXG4gIHByaXZhdGUgd2FpdEV4cGVjdGVkVGltZW91dElkPzogbnVtYmVyXG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogSVZpcnR1YWxXZWJTb2NrZXRDbGllbnRDb25zdHJ1Y3Rvck9wdGlvbnMpIHtcbiAgICB0aGlzLndhdGNoSWQgPSBgd2F0Y2hpZF8keytuZXcgRGF0ZSgpfV8ke01hdGgucmFuZG9tKCl9YFxuICAgIHRoaXMuZW52SWQgPSBvcHRpb25zLmVudklkXG4gICAgdGhpcy5jb2xsZWN0aW9uTmFtZSA9IG9wdGlvbnMuY29sbGVjdGlvbk5hbWVcbiAgICB0aGlzLnF1ZXJ5ID0gb3B0aW9ucy5xdWVyeVxuICAgIHRoaXMubGltaXQgPSBvcHRpb25zLmxpbWl0XG4gICAgdGhpcy5vcmRlckJ5ID0gb3B0aW9ucy5vcmRlckJ5XG4gICAgdGhpcy5zZW5kID0gb3B0aW9ucy5zZW5kXG4gICAgdGhpcy5sb2dpbiA9IG9wdGlvbnMubG9naW5cbiAgICB0aGlzLmlzV1NDb25uZWN0ZWQgPSBvcHRpb25zLmlzV1NDb25uZWN0ZWRcbiAgICB0aGlzLm9uY2VXU0Nvbm5lY3RlZCA9IG9wdGlvbnMub25jZVdTQ29ubmVjdGVkXG4gICAgdGhpcy5nZXRXYWl0RXhwZWN0ZWRUaW1lb3V0TGVuZ3RoID0gb3B0aW9ucy5nZXRXYWl0RXhwZWN0ZWRUaW1lb3V0TGVuZ3RoXG4gICAgdGhpcy5vbldhdGNoU3RhcnQgPSBvcHRpb25zLm9uV2F0Y2hTdGFydFxuICAgIHRoaXMub25XYXRjaENsb3NlID0gb3B0aW9ucy5vbldhdGNoQ2xvc2VcbiAgICB0aGlzLmRlYnVnID0gb3B0aW9ucy5kZWJ1Z1xuXG4gICAgdGhpcy5hdmFpbGFibGVSZXRyaWVzID0ge1xuICAgICAgSU5JVF9XQVRDSDogREVGQVVMVF9NQVhfQVVUT19SRVRSWV9PTl9FUlJPUixcbiAgICAgIFJFQlVJTERfV0FUQ0g6IERFRkFVTFRfTUFYX0FVVE9fUkVUUllfT05fRVJST1IsXG4gICAgICBDSEVDS19MQVNUOiBERUZBVUxUX01BWF9TRU5EX0FDS19BVVRPX1JFVFJZX09OX0VSUk9SLFxuICAgIH1cblxuICAgIHRoaXMubGlzdGVuZXIgPSBuZXcgUmVhbHRpbWVMaXN0ZW5lcih7XG4gICAgICBjbG9zZTogKCkgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlV2F0Y2goKVxuICAgICAgfSxcbiAgICAgIG9uQ2hhbmdlOiBvcHRpb25zLm9uQ2hhbmdlLFxuICAgICAgb25FcnJvcjogb3B0aW9ucy5vbkVycm9yLFxuICAgICAgZGVidWc6IHRoaXMuZGVidWcsXG4gICAgICB2aXJ0dWFsQ2xpZW50OiB0aGlzLFxuICAgIH0pXG5cbiAgICB0aGlzLmluaXRXYXRjaCgpXG4gIH1cblxuICBvbk1lc3NhZ2UobXNnOiBJUmVzcG9uc2VNZXNzYWdlKSB7XG4gICAgLy8gd2F0Y2hTdGF0dXMgc2FuaXR5IGNoZWNrXG4gICAgc3dpdGNoICh0aGlzLndhdGNoU3RhdHVzKSB7XG4gICAgICBjYXNlIFdhdGNoU3RhdHVzLlBBVVNFRDoge1xuICAgICAgICAvLyBpZ25vcmUgYWxsIGJ1dCBlcnJvciBtZXNzYWdlXG4gICAgICAgIGlmIChtc2cubXNnVHlwZSAhPT0gJ0VSUk9SJykge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlIFdhdGNoU3RhdHVzLkxPR0dJTkdJTjpcbiAgICAgIGNhc2UgV2F0Y2hTdGF0dXMuSU5JVElORzpcbiAgICAgIGNhc2UgV2F0Y2hTdGF0dXMuUkVCVUlMRElORzoge1xuICAgICAgICBjb25zb2xlLndhcm4oYFtyZWFsdGltZSBsaXN0ZW5lcl0gaW50ZXJuYWwgbm9uLWZhdGFsIGVycm9yOiB1bmV4cGVjdGVkIG1lc3NhZ2UgcmVjZWl2ZWQgd2hpbGUgJHt0aGlzLndhdGNoU3RhdHVzfWApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY2FzZSBXYXRjaFN0YXR1cy5DTE9TRUQ6IHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbcmVhbHRpbWUgbGlzdGVuZXJdIGludGVybmFsIG5vbi1mYXRhbCBlcnJvcjogdW5leHBlY3RlZCBtZXNzYWdlIHJlY2VpdmVkIHdoZW4gdGhlIHdhdGNoIGhhcyBjbG9zZWQnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNhc2UgV2F0Y2hTdGF0dXMuRVJST1JFRDoge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tyZWFsdGltZSBsaXN0ZW5lcl0gaW50ZXJuYWwgbm9uLWZhdGFsIGVycm9yOiB1bmV4cGVjdGVkIG1lc3NhZ2UgcmVjZWl2ZWQgd2hlbiB0aGUgd2F0Y2ggaGFzIGVuZGVkIHdpdGggZXJyb3InKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc2Vzc2lvbkluZm8pIHtcbiAgICAgIGNvbnNvbGUud2FybignW3JlYWx0aW1lIGxpc3RlbmVyXSBpbnRlcm5hbCBub24tZmF0YWwgZXJyb3I6IHNlc3Npb25JbmZvIG5vdCBmb3VuZCB3aGlsZSBtZXNzYWdlIGlzIHJlY2VpdmVkLicpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnNjaGVkdWxlU2VuZEFDSygpXG5cbiAgICBzd2l0Y2ggKG1zZy5tc2dUeXBlKSB7XG4gICAgICBjYXNlICdORVhUX0VWRU5UJzoge1xuICAgICAgICAvLyBpZiAocHJvY2Vzcy5lbnYuREVCVUcpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAvLyBpZiAod3guX2lnbm9yZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYG5leHRldmVudCAke21zZy5tc2dEYXRhLmN1cnJFdmVudH0gaWdub3JlZGAsIG1zZylcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAvLyB3eC5faWdub3JlID0gZmFsc2VcbiAgICAgICAgLy8gcmV0dXJuXG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlU2VydmVyRXZlbnRzKG1zZylcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0NIRUNLX0VWRU5UJzoge1xuICAgICAgICBpZiAodGhpcy5zZXNzaW9uSW5mby5jdXJyZW50RXZlbnRJZCA8IG1zZy5tc2dEYXRhLmN1cnJFdmVudCkge1xuICAgICAgICAgIC8vIGNsaWVudCBldmVudElEIDwgc2VydmVyIGV2ZW50SUQ6XG4gICAgICAgICAgLy8gdGhlcmUgbWlnaHQgYmUgb25lIG9yIG1vcmUgcGVuZGluZyBldmVudHMgbm90IHlldCByZWNlaXZlZCBidXQgc2VudCBieSB0aGUgc2VydmVyXG4gICAgICAgICAgdGhpcy5zZXNzaW9uSW5mby5leHBlY3RFdmVudElkID0gbXNnLm1zZ0RhdGEuY3VyckV2ZW50XG4gICAgICAgICAgdGhpcy5jbGVhcldhaXRFeHBlY3RlZEV2ZW50KClcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgdGhpcy53YWl0RXhwZWN0ZWRUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIC8vIG11c3QgcmVidWlsZCB3YXRjaFxuICAgICAgICAgICAgdGhpcy5yZWJ1aWxkV2F0Y2goKVxuICAgICAgICAgIH0sIHRoaXMuZ2V0V2FpdEV4cGVjdGVkVGltZW91dExlbmd0aCgpKVxuXG4gICAgICAgICAgY29uc29sZS5sb2coYFtyZWFsdGltZV0gd2FpdEV4cGVjdGVkVGltZW91dExlbmd0aCAke3RoaXMuZ2V0V2FpdEV4cGVjdGVkVGltZW91dExlbmd0aCgpfWApXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0VSUk9SJzoge1xuICAgICAgICAvLyByZWNlaXZlIHNlcnZlciBlcnJvclxuICAgICAgICB0aGlzLmNsb3NlV2l0aEVycm9yKG5ldyBDbG91ZFNES0Vycm9yKHtcbiAgICAgICAgICBlcnJDb2RlOiBFUlJfQ09ERS5TREtfREFUQUJBU0VfUkVBTFRJTUVfTElTVEVORVJfU0VSVkVSX0VSUk9SX01TRyBhcyBzdHJpbmcsXG4gICAgICAgICAgZXJyTXNnOiBgJHttc2cubXNnRGF0YS5jb2RlfSAtICR7bXNnLm1zZ0RhdGEubWVzc2FnZX1gLFxuICAgICAgICB9KSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBbcmVhbHRpbWUgbGlzdGVuZXJdIHZpcnR1YWwgY2xpZW50IHJlY2VpdmUgdW5leHBlY3RlZCBtc2cgJHttc2cubXNnVHlwZX06IGAsXG4gICAgICAgICAgbXNnXG4gICAgICAgIClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjbG9zZVdpdGhFcnJvcihlcnJvcjogYW55KSB7XG4gICAgdGhpcy53YXRjaFN0YXR1cyA9IFdhdGNoU3RhdHVzLkVSUk9SRURcbiAgICB0aGlzLmNsZWFyQUNLU2NoZWR1bGUoKVxuICAgIHRoaXMubGlzdGVuZXIub25FcnJvcihlcnJvcilcbiAgICB0aGlzLm9uV2F0Y2hDbG9zZShcbiAgICAgIHRoaXMsXG4gICAgICAodGhpcy5zZXNzaW9uSW5mbz8ucXVlcnlJRCkgfHwgJydcbiAgICApXG5cbiAgICBjb25zb2xlLmxvZyhgW3JlYWx0aW1lXSBjbGllbnQgY2xvc2VkICgke3RoaXMuY29sbGVjdGlvbk5hbWV9ICR7dGhpcy5xdWVyeX0pICh3YXRjaElkICR7dGhpcy53YXRjaElkfSlgKVxuICB9XG5cbiAgcGF1c2UoKSB7XG4gICAgdGhpcy53YXRjaFN0YXR1cyA9IFdhdGNoU3RhdHVzLlBBVVNFRFxuICAgIGNvbnNvbGUubG9nKGBbcmVhbHRpbWVdIGNsaWVudCBwYXVzZWQgKCR7dGhpcy5jb2xsZWN0aW9uTmFtZX0gJHt0aGlzLnF1ZXJ5fSkgKHdhdGNoSWQgJHt0aGlzLndhdGNoSWR9KWApXG4gIH1cblxuXG4gIGFzeW5jIHJlc3VtZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLndhdGNoU3RhdHVzID0gV2F0Y2hTdGF0dXMuUkVTVU1JTkdcblxuICAgIGNvbnNvbGUubG9nKGBbcmVhbHRpbWVdIGNsaWVudCByZXN1bWluZyB3aXRoICR7XG4gICAgICB0aGlzLnNlc3Npb25JbmZvID8gJ1JFQlVJTERfV0FUQ0gnIDogJ0lOSVRfV0FUQ0gnXG4gICAgfSAoJHt0aGlzLmNvbGxlY3Rpb25OYW1lfSAke3RoaXMucXVlcnl9KSAoJHt0aGlzLndhdGNoSWR9KWApXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgKHRoaXMuc2Vzc2lvbkluZm8gPyB0aGlzLnJlYnVpbGRXYXRjaCgpIDogdGhpcy5pbml0V2F0Y2goKSlcblxuICAgICAgY29uc29sZS5sb2coYFtyZWFsdGltZV0gY2xpZW50IHN1Y2Nlc3NmdWxseSByZXN1bWVkICgke3RoaXMuY29sbGVjdGlvbk5hbWV9ICR7dGhpcy5xdWVyeX0pICgke3RoaXMud2F0Y2hJZH0pYClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgW3JlYWx0aW1lXSBjbGllbnQgcmVzdW1lIGZhaWxlZCAoJHt0aGlzLmNvbGxlY3Rpb25OYW1lfSAke3RoaXMucXVlcnl9KSAoJHt0aGlzLndhdGNoSWR9KWAsXG4gICAgICAgIGVcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHdzTG9naW4gPSBhc3luYyAoXG4gICAgZW52SWQ/OiBzdHJpbmcsXG4gICAgcmVmcmVzaD86IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxJTG9naW5SZXN1bHQ+ID0+IHtcbiAgICB0aGlzLndhdGNoU3RhdHVzID0gV2F0Y2hTdGF0dXMuTE9HR0lOR0lOXG4gICAgY29uc3QgbG9naW5SZXN1bHQgPSBhd2FpdCB0aGlzLmxvZ2luKGVudklkLCByZWZyZXNoKVxuICAgIGlmICghdGhpcy5lbnZJZCkge1xuICAgICAgdGhpcy5lbnZJZCA9IGxvZ2luUmVzdWx0LmVudklkXG4gICAgfVxuICAgIHJldHVybiBsb2dpblJlc3VsdFxuICB9XG5cbiAgcHJpdmF0ZSBpbml0V2F0Y2ggPSBhc3luYyAoZm9yY2VSZWZyZXNoTG9naW4/OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgaWYgKHRoaXMuaW5pdFdhdGNoUHJvbWlzZSAhPT0gbnVsbCAmJiB0aGlzLmluaXRXYXRjaFByb21pc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5pdFdhdGNoUHJvbWlzZVxuICAgIH1cblxuICAgIHRoaXMuaW5pdFdhdGNoUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHZvaWQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodGhpcy53YXRjaFN0YXR1cyA9PT0gV2F0Y2hTdGF0dXMuUEFVU0VEKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnW3JlYWx0aW1lXSBpbml0V2F0Y2ggY2FuY2VsbGVkIG9uIHBhdXNlJylcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB7IGVudklkIH0gPSBhd2FpdCB0aGlzLndzTG9naW4odGhpcy5lbnZJZCwgZm9yY2VSZWZyZXNoTG9naW4pXG4gICAgICAgICAgaWYgKCh0aGlzLndhdGNoU3RhdHVzIGFzIFdhdGNoU3RhdHVzKSA9PT0gV2F0Y2hTdGF0dXMuUEFVU0VEKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnW3JlYWx0aW1lXSBpbml0V2F0Y2ggY2FuY2VsbGVkIG9uIHBhdXNlJylcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLndhdGNoU3RhdHVzID0gV2F0Y2hTdGF0dXMuSU5JVElOR1xuXG4gICAgICAgICAgY29uc3QgaW5pdFdhdGNoTXNnOiBJUmVxdWVzdE1lc3NhZ2VJbml0V2F0Y2hNc2cgPSB7XG4gICAgICAgICAgICB3YXRjaElkOiB0aGlzLndhdGNoSWQsXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IGdlblJlcXVlc3RJZCgpLFxuICAgICAgICAgICAgbXNnVHlwZTogJ0lOSVRfV0FUQ0gnLFxuICAgICAgICAgICAgbXNnRGF0YToge1xuICAgICAgICAgICAgICBlbnZJZCxcbiAgICAgICAgICAgICAgY29sbE5hbWU6IHRoaXMuY29sbGVjdGlvbk5hbWUsXG4gICAgICAgICAgICAgIHF1ZXJ5OiB0aGlzLnF1ZXJ5LFxuICAgICAgICAgICAgICBsaW1pdDogdGhpcy5saW1pdCxcbiAgICAgICAgICAgICAgb3JkZXJCeTogdGhpcy5vcmRlckJ5LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBpbml0RXZlbnRNc2cgPSBhd2FpdCB0aGlzLnNlbmQ8SVJlc3BvbnNlTWVzc2FnZUluaXRFdmVudE1zZz4oe1xuICAgICAgICAgICAgbXNnOiBpbml0V2F0Y2hNc2csXG4gICAgICAgICAgICB3YWl0UmVzcG9uc2U6IHRydWUsXG4gICAgICAgICAgICBza2lwT25NZXNzYWdlOiB0cnVlLFxuICAgICAgICAgICAgdGltZW91dDogREVGQVVMVF9JTklUX1dBVENIX1RJTUVPVVQsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGNvbnN0IHsgZXZlbnRzLCBjdXJyRXZlbnQgfSA9IGluaXRFdmVudE1zZy5tc2dEYXRhXG5cbiAgICAgICAgICB0aGlzLnNlc3Npb25JbmZvID0ge1xuICAgICAgICAgICAgcXVlcnlJRDogaW5pdEV2ZW50TXNnLm1zZ0RhdGEucXVlcnlJRCxcbiAgICAgICAgICAgIGN1cnJlbnRFdmVudElkOiBjdXJyRXZlbnQgLSAxLFxuICAgICAgICAgICAgY3VycmVudERvY3M6IFtdLFxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEZJWDogaW4gaW5pdEV2ZW50IG1lc3NhZ2UsIGFsbCBldmVudHMgaGF2ZSBpZCAwLCB3aGljaCBpcyBpbmNvbnNpc3RlbnQgd2l0aCBjdXJyRXZlbnRcbiAgICAgICAgICBpZiAoZXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBldmVudHMpIHtcbiAgICAgICAgICAgICAgZS5JRCA9IGN1cnJFdmVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5oYW5kbGVTZXJ2ZXJFdmVudHMoaW5pdEV2ZW50TXNnKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb25JbmZvLmN1cnJlbnRFdmVudElkID0gY3VyckV2ZW50XG4gICAgICAgICAgICBjb25zdCBzbmFwc2hvdCA9IG5ldyBTbmFwc2hvdCh7XG4gICAgICAgICAgICAgIGlkOiBjdXJyRXZlbnQsXG4gICAgICAgICAgICAgIGRvY0NoYW5nZXM6IFtdLFxuICAgICAgICAgICAgICBkb2NzOiBbXSxcbiAgICAgICAgICAgICAgdHlwZTogJ2luaXQnLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXIub25DaGFuZ2Uoc25hcHNob3QpXG4gICAgICAgICAgICB0aGlzLnNjaGVkdWxlU2VuZEFDSygpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMub25XYXRjaFN0YXJ0KHRoaXMsIHRoaXMuc2Vzc2lvbkluZm8ucXVlcnlJRClcbiAgICAgICAgICB0aGlzLndhdGNoU3RhdHVzID0gV2F0Y2hTdGF0dXMuQUNUSVZFXG4gICAgICAgICAgdGhpcy5hdmFpbGFibGVSZXRyaWVzLklOSVRfV0FUQ0ggPSBERUZBVUxUX01BWF9BVVRPX1JFVFJZX09OX0VSUk9SXG4gICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZVdhdGNoRXN0YWJsaXNobWVudEVycm9yKGUsIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbk5hbWU6ICdJTklUX1dBVENIJyxcbiAgICAgICAgICAgIHJlc29sdmUsXG4gICAgICAgICAgICByZWplY3QsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSkoKVxuICAgIH0pXG5cbiAgICBsZXQgc3VjY2VzcyA9IGZhbHNlXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5pbml0V2F0Y2hQcm9taXNlXG4gICAgICBzdWNjZXNzID0gdHJ1ZVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmluaXRXYXRjaFByb21pc2UgPSB1bmRlZmluZWRcbiAgICB9XG4gICAgY29uc29sZS5sb2coYFtyZWFsdGltZV0gaW5pdFdhdGNoICR7c3VjY2VzcyA/ICdzdWNjZXNzJyA6ICdmYWlsJ31gKVxuICB9XG5cbiAgcHJpdmF0ZSByZWJ1aWxkV2F0Y2ggPSBhc3luYyAoZm9yY2VSZWZyZXNoTG9naW4/OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgaWYgKHRoaXMucmVidWlsZFdhdGNoUHJvbWlzZSAhPT0gbnVsbCAmJiB0aGlzLnJlYnVpbGRXYXRjaFByb21pc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVidWlsZFdhdGNoUHJvbWlzZVxuICAgIH1cblxuICAgIHRoaXMucmVidWlsZFdhdGNoUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHZvaWQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodGhpcy53YXRjaFN0YXR1cyA9PT0gV2F0Y2hTdGF0dXMuUEFVU0VEKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnW3JlYWx0aW1lXSByZWJ1aWxkV2F0Y2ggY2FuY2VsbGVkIG9uIHBhdXNlJylcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKClcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgeyBlbnZJZCB9ID0gYXdhaXQgdGhpcy53c0xvZ2luKHRoaXMuZW52SWQsIGZvcmNlUmVmcmVzaExvZ2luKVxuXG4gICAgICAgICAgaWYgKCF0aGlzLnNlc3Npb25JbmZvKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbiBub3QgcmVidWlsZFdhdGNoIHdpdGhvdXQgYSBzdWNjZXNzZnVsIGluaXRXYXRjaCAobGFjayBvZiBzZXNzaW9uSW5mbyknKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgodGhpcy53YXRjaFN0YXR1cyBhcyBXYXRjaFN0YXR1cykgPT09IFdhdGNoU3RhdHVzLlBBVVNFRCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tyZWFsdGltZV0gcmVidWlsZFdhdGNoIGNhbmNlbGxlZCBvbiBwYXVzZScpXG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy53YXRjaFN0YXR1cyA9IFdhdGNoU3RhdHVzLlJFQlVJTERJTkdcblxuICAgICAgICAgIGNvbnN0IHJlYnVpbGRXYXRjaE1zZzogSVJlcXVlc3RNZXNzYWdlUmVidWlsZFdhdGNoTXNnID0ge1xuICAgICAgICAgICAgd2F0Y2hJZDogdGhpcy53YXRjaElkLFxuICAgICAgICAgICAgcmVxdWVzdElkOiBnZW5SZXF1ZXN0SWQoKSxcbiAgICAgICAgICAgIG1zZ1R5cGU6ICdSRUJVSUxEX1dBVENIJyxcbiAgICAgICAgICAgIG1zZ0RhdGE6IHtcbiAgICAgICAgICAgICAgZW52SWQsXG4gICAgICAgICAgICAgIGNvbGxOYW1lOiB0aGlzLmNvbGxlY3Rpb25OYW1lLFxuICAgICAgICAgICAgICBxdWVyeUlEOiB0aGlzLnNlc3Npb25JbmZvLnF1ZXJ5SUQsXG4gICAgICAgICAgICAgIGV2ZW50SUQ6IHRoaXMuc2Vzc2lvbkluZm8uY3VycmVudEV2ZW50SWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG5leHRFdmVudE1zZyA9IGF3YWl0IHRoaXMuc2VuZDxJUmVzcG9uc2VNZXNzYWdlTmV4dEV2ZW50TXNnPih7XG4gICAgICAgICAgICBtc2c6IHJlYnVpbGRXYXRjaE1zZyxcbiAgICAgICAgICAgIHdhaXRSZXNwb25zZTogdHJ1ZSxcbiAgICAgICAgICAgIHNraXBPbk1lc3NhZ2U6IGZhbHNlLFxuICAgICAgICAgICAgdGltZW91dDogREVGQVVMVF9SRUJVSUxEX1dBVENIX1RJTUVPVVQsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHRoaXMuaGFuZGxlU2VydmVyRXZlbnRzKG5leHRFdmVudE1zZylcblxuICAgICAgICAgIHRoaXMud2F0Y2hTdGF0dXMgPSBXYXRjaFN0YXR1cy5BQ1RJVkVcbiAgICAgICAgICB0aGlzLmF2YWlsYWJsZVJldHJpZXMuUkVCVUlMRF9XQVRDSCA9IERFRkFVTFRfTUFYX0FVVE9fUkVUUllfT05fRVJST1JcbiAgICAgICAgICByZXNvbHZlKClcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRoaXMuaGFuZGxlV2F0Y2hFc3RhYmxpc2htZW50RXJyb3IoZSwge1xuICAgICAgICAgICAgb3BlcmF0aW9uTmFtZTogJ1JFQlVJTERfV0FUQ0gnLFxuICAgICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICAgIHJlamVjdCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9KSgpXG4gICAgfSlcblxuICAgIGxldCBzdWNjZXNzID0gZmFsc2VcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnJlYnVpbGRXYXRjaFByb21pc2VcbiAgICAgIHN1Y2Nlc3MgPSB0cnVlXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMucmVidWlsZFdhdGNoUHJvbWlzZSA9IHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBbcmVhbHRpbWVdIHJlYnVpbGRXYXRjaCAke3N1Y2Nlc3MgPyAnc3VjY2VzcycgOiAnZmFpbCd9YClcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlV2F0Y2hFc3RhYmxpc2htZW50RXJyb3IgPSBhc3luYyAoXG4gICAgZTogYW55LFxuICAgIG9wdGlvbnM6IElIYW5kbGVXYXRjaEVzdGFibGlzaG1lbnRFcnJvck9wdGlvbnNcbiAgKSA9PiB7XG4gICAgY29uc3QgaXNJbml0V2F0Y2ggPSBvcHRpb25zLm9wZXJhdGlvbk5hbWUgPT09ICdJTklUX1dBVENIJ1xuXG4gICAgY29uc3QgYWJvcnRXYXRjaCA9ICgpID0+IHtcbiAgICAgIC8vIG1vY2sgdGVtcCBjb21tZW50XG4gICAgICB0aGlzLmNsb3NlV2l0aEVycm9yKG5ldyBDbG91ZFNES0Vycm9yKHtcbiAgICAgICAgZXJyQ29kZTogaXNJbml0V2F0Y2hcbiAgICAgICAgICA/IChFUlJfQ09ERS5TREtfREFUQUJBU0VfUkVBTFRJTUVfTElTVEVORVJfSU5JVF9XQVRDSF9GQUlMIGFzIHN0cmluZylcbiAgICAgICAgICA6IChFUlJfQ09ERS5TREtfREFUQUJBU0VfUkVBTFRJTUVfTElTVEVORVJfUkVCVUlMRF9XQVRDSF9GQUlMIGFzIHN0cmluZyksXG4gICAgICAgIGVyck1zZzogZSxcbiAgICAgIH0pKVxuICAgICAgb3B0aW9ucy5yZWplY3QoZSlcbiAgICB9XG5cbiAgICBjb25zdCByZXRyeSA9IChyZWZyZXNoTG9naW4/OiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAodGhpcy51c2VSZXRyeVRpY2tldChvcHRpb25zLm9wZXJhdGlvbk5hbWUpKSB7XG4gICAgICAgIGlmIChpc0luaXRXYXRjaCkge1xuICAgICAgICAgIHRoaXMuaW5pdFdhdGNoUHJvbWlzZSA9IHVuZGVmaW5lZFxuICAgICAgICAgIG9wdGlvbnMucmVzb2x2ZSh0aGlzLmluaXRXYXRjaChyZWZyZXNoTG9naW4pKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVidWlsZFdhdGNoUHJvbWlzZSA9IHVuZGVmaW5lZFxuICAgICAgICAgIG9wdGlvbnMucmVzb2x2ZSh0aGlzLnJlYnVpbGRXYXRjaChyZWZyZXNoTG9naW4pKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhYm9ydFdhdGNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmhhbmRsZUNvbW1vbkVycm9yKGUsIHtcbiAgICAgIG9uU2lnbkVycm9yOiAoKSA9PiByZXRyeSh0cnVlKSxcbiAgICAgIG9uVGltZW91dEVycm9yOiAoKSA9PiByZXRyeShmYWxzZSksXG4gICAgICBvbk5vdFJldHJ5YWJsZUVycm9yOiBhYm9ydFdhdGNoLFxuICAgICAgb25DYW5jZWxsZWRFcnJvcjogb3B0aW9ucy5yZWplY3QsXG4gICAgICBvblVua25vd25FcnJvcjogKCkgPT4ge1xuICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBvbldTRGlzY29ubmVjdGVkID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnBhdXNlKClcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vbmNlV1NDb25uZWN0ZWQoKVxuICAgICAgICAgICAgICByZXRyeSh0cnVlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNXU0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgICAgICAgIGF3YWl0IG9uV1NEaXNjb25uZWN0ZWQoKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYXdhaXQgc2xlZXAoREVGQVVMVF9XQUlUX1RJTUVfT05fVU5LTk9XTl9FUlJPUilcbiAgICAgICAgICAgICAgaWYgKHRoaXMud2F0Y2hTdGF0dXMgPT09IFdhdGNoU3RhdHVzLlBBVVNFRCkge1xuICAgICAgICAgICAgICAgIC8vIGNhbmNlbFxuICAgICAgICAgICAgICAgIG9wdGlvbnMucmVqZWN0KG5ldyBDYW5jZWxsZWRFcnJvcihgJHtvcHRpb25zLm9wZXJhdGlvbk5hbWV9IGNhbmNlbGxlZCBkdWUgdG8gcGF1c2UgYWZ0ZXIgdW5rbm93bkVycm9yYCkpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNXU0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgb25XU0Rpc2Nvbm5lY3RlZCgpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0cnkoZmFsc2UpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyB1bmV4cGVjdGVkIGVycm9yIHdoaWxlIGhhbmRsaW5nIGVycm9yLCBpbiBvcmRlciB0byBwcm92aWRlIG1heGltdW0gZWZmb3J0IG9uIFNFQU1JTkdMRVNTIEZBVUxUIFRPTEVSQU5DRSwganVzdCByZXRyeVxuICAgICAgICAgICAgcmV0cnkodHJ1ZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pKClcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VXYXRjaCA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBxdWVyeUlkID0gdGhpcy5zZXNzaW9uSW5mbyA/IHRoaXMuc2Vzc2lvbkluZm8ucXVlcnlJRCA6ICcnXG5cbiAgICBpZiAodGhpcy53YXRjaFN0YXR1cyAhPT0gV2F0Y2hTdGF0dXMuQUNUSVZFKSB7XG4gICAgICB0aGlzLndhdGNoU3RhdHVzID0gV2F0Y2hTdGF0dXMuQ0xPU0VEXG4gICAgICB0aGlzLm9uV2F0Y2hDbG9zZSh0aGlzLCBxdWVyeUlkKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMud2F0Y2hTdGF0dXMgPSBXYXRjaFN0YXR1cy5DTE9TSU5HXG5cbiAgICAgIGNvbnN0IGNsb3NlV2F0Y2hNc2c6IElSZXF1ZXN0TWVzc2FnZUNsb3NlV2F0Y2hNc2cgPSB7XG4gICAgICAgIHdhdGNoSWQ6IHRoaXMud2F0Y2hJZCxcbiAgICAgICAgcmVxdWVzdElkOiBnZW5SZXF1ZXN0SWQoKSxcbiAgICAgICAgbXNnVHlwZTogJ0NMT1NFX1dBVENIJyxcbiAgICAgICAgbXNnRGF0YTogbnVsbCxcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5zZW5kKHtcbiAgICAgICAgbXNnOiBjbG9zZVdhdGNoTXNnLFxuICAgICAgfSlcblxuICAgICAgdGhpcy5zZXNzaW9uSW5mbyA9IHVuZGVmaW5lZFxuICAgICAgdGhpcy53YXRjaFN0YXR1cyA9IFdhdGNoU3RhdHVzLkNMT1NFRFxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuY2xvc2VXaXRoRXJyb3IobmV3IENsb3VkU0RLRXJyb3Ioe1xuICAgICAgICBlcnJDb2RlOiBFUlJfQ09ERS5TREtfREFUQUJBU0VfUkVBTFRJTUVfTElTVEVORVJfQ0xPU0VfV0FUQ0hfRkFJTCBhcyBzdHJpbmcsXG4gICAgICAgIGVyck1zZzogZSxcbiAgICAgIH0pKVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLm9uV2F0Y2hDbG9zZSh0aGlzLCBxdWVyeUlkKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2NoZWR1bGVTZW5kQUNLID0gKCkgPT4ge1xuICAgIHRoaXMuY2xlYXJBQ0tTY2hlZHVsZSgpXG5cbiAgICAvLyBUT0RPOiBzaG91bGQgd2UgY2hlY2sgc3RhdHVzIGFmdGVyIHRpbWVvdXRcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5hY2tUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLndhaXRFeHBlY3RlZFRpbWVvdXRJZCkge1xuICAgICAgICB0aGlzLnNjaGVkdWxlU2VuZEFDSygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbmRBQ0soKVxuICAgICAgfVxuICAgIH0sIERFRkFVTFRfU0VORF9BQ0tfREVCT1VOQ0VfVElNRU9VVClcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJBQ0tTY2hlZHVsZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5hY2tUaW1lb3V0SWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmFja1RpbWVvdXRJZClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlbmRBQ0sgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLndhdGNoU3RhdHVzICE9PSBXYXRjaFN0YXR1cy5BQ1RJVkUpIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZVNlbmRBQ0soKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLnNlc3Npb25JbmZvKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW3JlYWx0aW1lIGxpc3RlbmVyXSBjYW4gbm90IHNlbmQgYWNrIHdpdGhvdXQgYSBzdWNjZXNzZnVsIGluaXRXYXRjaCAobGFjayBvZiBzZXNzaW9uSW5mbyknKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgYWNrTXNnOiBJUmVxdWVzdE1lc3NhZ2VDaGVja0xhc3RNc2cgPSB7XG4gICAgICAgIHdhdGNoSWQ6IHRoaXMud2F0Y2hJZCxcbiAgICAgICAgcmVxdWVzdElkOiBnZW5SZXF1ZXN0SWQoKSxcbiAgICAgICAgbXNnVHlwZTogJ0NIRUNLX0xBU1QnLFxuICAgICAgICBtc2dEYXRhOiB7XG4gICAgICAgICAgcXVlcnlJRDogdGhpcy5zZXNzaW9uSW5mby5xdWVyeUlELFxuICAgICAgICAgIGV2ZW50SUQ6IHRoaXMuc2Vzc2lvbkluZm8uY3VycmVudEV2ZW50SWQsXG4gICAgICAgIH0sXG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuc2VuZCh7XG4gICAgICAgIG1zZzogYWNrTXNnLFxuICAgICAgfSlcblxuICAgICAgdGhpcy5zY2hlZHVsZVNlbmRBQ0soKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIFRPRE86IHJlZmFjdG9yXG4gICAgICBpZiAoaXNSZWFsdGltZUVycm9yTWVzc2FnZUVycm9yKGUpKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IGUucGF5bG9hZFxuICAgICAgICBzd2l0Y2ggKG1zZy5tc2dEYXRhLmNvZGUpIHtcbiAgICAgICAgICAvLyBzaWduYXR1cmUgZXJyb3IgLT4gcmV0cnkgd2l0aCByZWZyZXNoZWQgc2lnbmF0dXJlXG4gICAgICAgICAgY2FzZSAnQ0hFQ0tfTE9HSU5fRkFJTEVEJzpcbiAgICAgICAgICBjYXNlICdTSUdOX0VYUElSRURfRVJST1InOlxuICAgICAgICAgIGNhc2UgJ1NJR05fSU5WQUxJRF9FUlJPUic6XG4gICAgICAgICAgY2FzZSAnU0lHTl9QQVJBTV9JTlZBTElEJzoge1xuICAgICAgICAgICAgdGhpcy5yZWJ1aWxkV2F0Y2goKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIG90aGVyIC0+IHRocm93XG4gICAgICAgICAgY2FzZSAnUVVFUllJRF9JTlZBTElEX0VSUk9SJzpcbiAgICAgICAgICBjYXNlICdTWVNfRVJSJzpcbiAgICAgICAgICBjYXNlICdJTlZBTElJRF9FTlYnOlxuICAgICAgICAgIGNhc2UgJ0NPTExFQ1RJT05fUEVSTUlTU0lPTl9ERU5JRUQnOiB7XG4gICAgICAgICAgICAvLyBtdXN0IHRocm93XG4gICAgICAgICAgICB0aGlzLmNsb3NlV2l0aEVycm9yKG5ldyBDbG91ZFNES0Vycm9yKHtcbiAgICAgICAgICAgICAgZXJyQ29kZTogRVJSX0NPREUuU0RLX0RBVEFCQVNFX1JFQUxUSU1FX0xJU1RFTkVSX0NIRUNLX0xBU1RfRkFJTCBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgIGVyck1zZzogbXNnLm1zZ0RhdGEuY29kZSxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIG1heWJlIHJldHJ5YWJsZVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmF2YWlsYWJsZVJldHJpZXMuQ0hFQ0tfTEFTVFxuICAgICAgICAmJiB0aGlzLmF2YWlsYWJsZVJldHJpZXMuQ0hFQ0tfTEFTVCA+IDBcbiAgICAgICkge1xuICAgICAgICB0aGlzLmF2YWlsYWJsZVJldHJpZXMuQ0hFQ0tfTEFTVCAtPSAxXG4gICAgICAgIHRoaXMuc2NoZWR1bGVTZW5kQUNLKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2xvc2VXaXRoRXJyb3IobmV3IENsb3VkU0RLRXJyb3Ioe1xuICAgICAgICAgIGVyckNvZGU6IEVSUl9DT0RFLlNES19EQVRBQkFTRV9SRUFMVElNRV9MSVNURU5FUl9DSEVDS19MQVNUX0ZBSUwgYXMgc3RyaW5nLFxuICAgICAgICAgIGVyck1zZzogZSxcbiAgICAgICAgfSkpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDb21tb25FcnJvciA9IChcbiAgICBlOiBhbnksXG4gICAgb3B0aW9uczogSUhhbmRsZUNvbW1vbkVycm9yT3B0aW9uc1xuICApOiB2b2lkID0+IHtcbiAgICBpZiAoaXNSZWFsdGltZUVycm9yTWVzc2FnZUVycm9yKGUpKSB7XG4gICAgICBjb25zdCBtc2cgPSBlLnBheWxvYWRcbiAgICAgIHN3aXRjaCAobXNnLm1zZ0RhdGEuY29kZSkge1xuICAgICAgICAvLyBzaWduYXR1cmUgZXJyb3IgLT4gcmV0cnkgd2l0aCByZWZyZXNoZWQgc2lnbmF0dXJlXG4gICAgICAgIGNhc2UgJ0NIRUNLX0xPR0lOX0ZBSUxFRCc6XG4gICAgICAgIGNhc2UgJ1NJR05fRVhQSVJFRF9FUlJPUic6XG4gICAgICAgIGNhc2UgJ1NJR05fSU5WQUxJRF9FUlJPUic6XG4gICAgICAgIGNhc2UgJ1NJR05fUEFSQU1fSU5WQUxJRCc6IHtcbiAgICAgICAgICBvcHRpb25zLm9uU2lnbkVycm9yKGUpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgLy8gbm90LXJldHJ5YWJsZSBlcnJvciAtPiB0aHJvd1xuICAgICAgICBjYXNlICdRVUVSWUlEX0lOVkFMSURfRVJST1InOlxuICAgICAgICBjYXNlICdTWVNfRVJSJzpcbiAgICAgICAgY2FzZSAnSU5WQUxJSURfRU5WJzpcbiAgICAgICAgY2FzZSAnQ09MTEVDVElPTl9QRVJNSVNTSU9OX0RFTklFRCc6IHtcbiAgICAgICAgICBvcHRpb25zLm9uTm90UmV0cnlhYmxlRXJyb3IoZSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgb3B0aW9ucy5vbk5vdFJldHJ5YWJsZUVycm9yKGUpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzVGltZW91dEVycm9yKGUpKSB7XG4gICAgICAvLyB0aW1lb3V0IGVycm9yXG4gICAgICBvcHRpb25zLm9uVGltZW91dEVycm9yKGUpXG4gICAgICByZXR1cm5cbiAgICB9IGVsc2UgaWYgKGlzQ2FuY2VsbGVkRXJyb3IoZSkpIHtcbiAgICAgIC8vIGNhbmNlbGxlZCBlcnJvclxuICAgICAgb3B0aW9ucy5vbkNhbmNlbGxlZEVycm9yKGUpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyB1bmtub3duIGVycm9yXG4gICAgb3B0aW9ucy5vblVua25vd25FcnJvcihlKVxuICB9XG5cbiAgLy8gY3JlZGl0IGEgcmV0cnkgY2hhbmNlIGZyb20gYXZhaWxhYmxlUmV0cmllc1xuICBwcml2YXRlIHVzZVJldHJ5VGlja2V0KG9wZXJhdGlvbk5hbWU6IElSZXF1ZXN0TXNnVHlwZSk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgIHRoaXMuYXZhaWxhYmxlUmV0cmllc1tvcGVyYXRpb25OYW1lXVxuICAgICAgJiYgdGhpcy5hdmFpbGFibGVSZXRyaWVzW29wZXJhdGlvbk5hbWVdISA+IDBcbiAgICApIHtcbiAgICAgIHRoaXMuYXZhaWxhYmxlUmV0cmllc1tvcGVyYXRpb25OYW1lXSEgLT0gMVxuICAgICAgY29uc29sZS5sb2coYFtyZWFsdGltZV0gJHtvcGVyYXRpb25OYW1lfSB1c2UgYSByZXRyeSB0aWNrZXQsIG5vdyBvbmx5ICR7dGhpcy5hdmFpbGFibGVSZXRyaWVzW29wZXJhdGlvbk5hbWVdfSByZXRyeSBsZWZ0YClcblxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVNlcnZlckV2ZW50cyhtc2c6IElSZXNwb25zZU1lc3NhZ2VJbml0RXZlbnRNc2cgfCBJUmVzcG9uc2VNZXNzYWdlTmV4dEV2ZW50TXNnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc2NoZWR1bGVTZW5kQUNLKClcbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlU2VydmVyRXZlbnRzSW50ZXJuZWwobXNnKVxuICAgICAgdGhpcy5wb3N0SGFuZGxlU2VydmVyRXZlbnRzVmFsaWRpdHlDaGVjayhtc2cpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gVE9ETzogcmVwb3J0XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAnW3JlYWx0aW1lIGxpc3RlbmVyXSBpbnRlcm5hbCBub24tZmF0YWwgZXJyb3I6IGhhbmRsZSBzZXJ2ZXIgZXZlbnRzIGZhaWxlZCB3aXRoIGVycm9yOiAnLFxuICAgICAgICBlXG4gICAgICApXG4gICAgICB0aHJvdyBlXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTZXJ2ZXJFdmVudHNJbnRlcm5lbChtc2c6IElSZXNwb25zZU1lc3NhZ2VJbml0RXZlbnRNc2cgfCBJUmVzcG9uc2VNZXNzYWdlTmV4dEV2ZW50TXNnKSB7XG4gICAgY29uc3QgeyByZXF1ZXN0SWQgfSA9IG1zZ1xuXG4gICAgY29uc3QgeyBldmVudHMgfSA9IG1zZy5tc2dEYXRhXG4gICAgY29uc3QgeyBtc2dUeXBlIH0gPSBtc2dcblxuICAgIGlmICghZXZlbnRzLmxlbmd0aCB8fCAhdGhpcy5zZXNzaW9uSW5mbykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgeyBzZXNzaW9uSW5mbyB9ID0gdGhpc1xuXG4gICAgbGV0IGFsbENoYW5nZUV2ZW50czogSVNpbmdsZURCRXZlbnRbXVxuICAgIHRyeSB7XG4gICAgICBhbGxDaGFuZ2VFdmVudHMgPSBldmVudHMubWFwKGdldFB1YmxpY0V2ZW50KVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuY2xvc2VXaXRoRXJyb3IobmV3IENsb3VkU0RLRXJyb3Ioe1xuICAgICAgICBlcnJDb2RlOiBFUlJfQ09ERS5TREtfREFUQUJBU0VfUkVBTFRJTUVfTElTVEVORVJfUkVDRUlWRV9JTlZBTElEX1NFUlZFUl9EQVRBIGFzIHN0cmluZyxcbiAgICAgICAgZXJyTXNnOiBlLFxuICAgICAgfSkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBhZ2dyZWdhdGUgZG9jc1xuICAgIGxldCBkb2NzID0gWy4uLnNlc3Npb25JbmZvLmN1cnJlbnREb2NzXVxuICAgIGxldCBpbml0RW5jb3VudGVyZWQgPSBmYWxzZVxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhbGxDaGFuZ2VFdmVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoYW5nZSA9IGFsbENoYW5nZUV2ZW50c1tpXVxuXG4gICAgICBpZiAoc2Vzc2lvbkluZm8uY3VycmVudEV2ZW50SWQgPj0gY2hhbmdlLmlkKSB7XG4gICAgICAgIGlmICghYWxsQ2hhbmdlRXZlbnRzW2kgLSAxXSB8fCBjaGFuZ2UuaWQgPiBhbGxDaGFuZ2VFdmVudHNbaSAtIDFdLmlkKSB7XG4gICAgICAgICAgLy8gZHVwbGljYXRlIGV2ZW50LCBkcm9wYWJsZVxuICAgICAgICAgIC8vIFRPRE86IHJlcG9ydFxuICAgICAgICAgIC8vIGlmIChwcm9jZXNzLmVudi5ERUJVRykge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgW3JlYWx0aW1lXSBkdXBsaWNhdGUgZXZlbnQgcmVjZWl2ZWQsIGN1ciAke3Nlc3Npb25JbmZvLmN1cnJlbnRFdmVudElkfSBidXQgZ290ICR7Y2hhbmdlLmlkfWApXG4gICAgICAgICAgLy8gfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGFsbENoYW5nZUV2ZW50cyBzaG91bGQgYmUgaW4gYXNjZW5kaW5nIG9yZGVyIGFjY29yZGluZyB0byBldmVudElkLCB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW5zLCBtdXN0IHJlcG9ydCBhIG5vbi1mYXRhbCBlcnJvclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFtyZWFsdGltZSBsaXN0ZW5lcl0gc2VydmVyIG5vbi1mYXRhbCBlcnJvcjogZXZlbnRzIG91dCBvZiBvcmRlciAodGhlIGxhdHRlciBldmVudCdzIGlkIGlzIHNtYWxsZXIgdGhhbiB0aGF0IG9mIHRoZSBmb3JtZXIpIChyZXF1ZXN0SWQgJHtyZXF1ZXN0SWR9KWApXG4gICAgICAgIH1cbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSBpZiAoc2Vzc2lvbkluZm8uY3VycmVudEV2ZW50SWQgPT09IGNoYW5nZS5pZCAtIDEpIHtcbiAgICAgICAgLy8gY29ycmVjdCBzZXF1ZW5jZVxuICAgICAgICAvLyBmaXJzdCBoYW5kbGUgZGF0YVR5cGUgdGhlbiBxdWV1ZVR5cGU6XG4gICAgICAgIC8vIDEuIGRhdGFUeXBlOiB3ZSBPTkxZIHBvcHVsYXRlIGNoYW5nZS5kb2MgaWYgbmVjY2Vzc2FyeVxuICAgICAgICAvLyAyLiBxdWV1ZVR5cGU6IHdlIGJ1aWxkIHRoZSBkYXRhIHNuYXBzaG90XG5cbiAgICAgICAgc3dpdGNoIChjaGFuZ2UuZGF0YVR5cGUpIHtcbiAgICAgICAgICBjYXNlICd1cGRhdGUnOiB7XG4gICAgICAgICAgICAvLyBvbmx5IG5lZWQgdG8gcG9wdWxhdGUgY2hhbmdlLmRvYyB3aGVuIGl0IGlzIG5vdCBwcm92aWRlZFxuICAgICAgICAgICAgaWYgKCFjaGFuZ2UuZG9jKSB7XG4gICAgICAgICAgICAgIHN3aXRjaCAoY2hhbmdlLnF1ZXVlVHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3VwZGF0ZSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZGVxdWV1ZSc6IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsRG9jID0gZG9jcy5maW5kKGRvYyA9PiBkb2MuX2lkID09PSBjaGFuZ2UuZG9jSWQpXG4gICAgICAgICAgICAgICAgICBpZiAobG9jYWxEb2MpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYSBwYXJ0aWFsIHVwZGF0ZVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkb2MgPSBjbG9uZURlZXAobG9jYWxEb2MpXG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoYW5nZS51cGRhdGVkRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY2hhbmdlLnVwZGF0ZWRGaWVsZHMpLmZvckVhY2goKGZpZWxkUGF0aCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0KGRvYywgZmllbGRQYXRoLCBjaGFuZ2UudXBkYXRlZEZpZWxkc1tmaWVsZFBhdGhdKVxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hhbmdlLnJlbW92ZWRGaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkUGF0aCBvZiBjaGFuZ2UucmVtb3ZlZEZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5zZXQoZG9jLCBmaWVsZFBhdGgpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlLmRvYyA9IGRvY1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyByZXBvcnRcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3JlYWx0aW1lIGxpc3RlbmVyXSBpbnRlcm5hbCBub24tZmF0YWwgc2VydmVyIGVycm9yOiB1bmV4cGVjdGVkIHVwZGF0ZSBkYXRhVHlwZSBldmVudCB3aGVyZSBubyBkb2MgaXMgYXNzb2NpYXRlZC4nKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnZW5xdWV1ZSc6IHtcbiAgICAgICAgICAgICAgICAgIC8vIGRvYyBpcyBwcm92aWRlZCBieSBzZXJ2ZXIsIHRoaXMgc2hvdWxkIG5ldmVyIG9jY3VyXG4gICAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgQ2xvdWRTREtFcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIGVyckNvZGU6IEVSUl9DT0RFLlNES19EQVRBQkFTRV9SRUFMVElNRV9MSVNURU5FUl9VTkVYUEVDVEVEX0ZBVEFMX0VSUk9SIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgZXJyTXNnOiBgSGFuZGxlU2VydmVyRXZlbnRzOiBmdWxsIGRvYyBpcyBub3QgcHJvdmlkZWQgd2l0aCBkYXRhVHlwZT1cInVwZGF0ZVwiIGFuZCBxdWV1ZVR5cGU9XCJlbnF1ZXVlXCIgKHJlcXVlc3RJZCAke21zZy5yZXF1ZXN0SWR9KWAsXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVdpdGhFcnJvcihlcnIpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlcnJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ3JlcGxhY2UnOiB7XG4gICAgICAgICAgICAvLyB2YWxpZGF0aW9uXG4gICAgICAgICAgICBpZiAoIWNoYW5nZS5kb2MpIHtcbiAgICAgICAgICAgICAgLy8gZG9jIGlzIHByb3ZpZGVkIGJ5IHNlcnZlciwgdGhpcyBzaG91bGQgbmV2ZXIgb2NjdXJcbiAgICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IENsb3VkU0RLRXJyb3Ioe1xuICAgICAgICAgICAgICAgIGVyckNvZGU6IEVSUl9DT0RFLlNES19EQVRBQkFTRV9SRUFMVElNRV9MSVNURU5FUl9VTkVYUEVDVEVEX0ZBVEFMX0VSUk9SIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICBlcnJNc2c6IGBIYW5kbGVTZXJ2ZXJFdmVudHM6IGZ1bGwgZG9jIGlzIG5vdCBwcm92aWRlZCB3aXRoIGRhdGFUeXBlPVwicmVwbGFjZVwiIChyZXF1ZXN0SWQgJHttc2cucmVxdWVzdElkfSlgLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB0aGlzLmNsb3NlV2l0aEVycm9yKGVycilcbiAgICAgICAgICAgICAgdGhyb3cgZXJyXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdyZW1vdmUnOiB7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBkb2NzLmZpbmQoZG9jID0+IGRvYy5faWQgPT09IGNoYW5nZS5kb2NJZClcbiAgICAgICAgICAgIGlmIChkb2MpIHtcbiAgICAgICAgICAgICAgY2hhbmdlLmRvYyA9IGRvY1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVE9ETyByZXBvcnRcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3JlYWx0aW1lIGxpc3RlbmVyXSBpbnRlcm5hbCBub24tZmF0YWwgc2VydmVyIGVycm9yOiB1bmV4cGVjdGVkIHJlbW92ZSBldmVudCB3aGVyZSBubyBkb2MgaXMgYXNzb2NpYXRlZC4nKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAnbGltaXQnOiB7XG4gICAgICAgICAgICBpZiAoIWNoYW5nZS5kb2MpIHtcbiAgICAgICAgICAgICAgc3dpdGNoIChjaGFuZ2UucXVldWVUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGVxdWV1ZSc6IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRvYyA9IGRvY3MuZmluZChkb2MgPT4gZG9jLl9pZCA9PT0gY2hhbmdlLmRvY0lkKVxuICAgICAgICAgICAgICAgICAgaWYgKGRvYykge1xuICAgICAgICAgICAgICAgICAgICBjaGFuZ2UuZG9jID0gZG9jXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbcmVhbHRpbWUgbGlzdGVuZXJdIGludGVybmFsIG5vbi1mYXRhbCBzZXJ2ZXIgZXJyb3I6IHVuZXhwZWN0ZWQgbGltaXQgZGF0YVR5cGUgZXZlbnQgd2hlcmUgbm8gZG9jIGlzIGFzc29jaWF0ZWQuJylcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2VucXVldWUnOiB7XG4gICAgICAgICAgICAgICAgICAvLyBkb2MgaXMgcHJvdmlkZWQgYnkgc2VydmVyLCB0aGlzIHNob3VsZCBuZXZlciBvY2N1clxuICAgICAgICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IENsb3VkU0RLRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICBlcnJDb2RlOiBFUlJfQ09ERS5TREtfREFUQUJBU0VfUkVBTFRJTUVfTElTVEVORVJfVU5FWFBFQ1RFRF9GQVRBTF9FUlJPUiBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgIGVyck1zZzogYEhhbmRsZVNlcnZlckV2ZW50czogZnVsbCBkb2MgaXMgbm90IHByb3ZpZGVkIHdpdGggZGF0YVR5cGU9XCJsaW1pdFwiIGFuZCBxdWV1ZVR5cGU9XCJlbnF1ZXVlXCIgKHJlcXVlc3RJZCAke21zZy5yZXF1ZXN0SWR9KWAsXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVdpdGhFcnJvcihlcnIpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlcnJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChjaGFuZ2UucXVldWVUeXBlKSB7XG4gICAgICAgICAgY2FzZSAnaW5pdCc6IHtcbiAgICAgICAgICAgIGlmICghaW5pdEVuY291bnRlcmVkKSB7XG4gICAgICAgICAgICAgIGluaXRFbmNvdW50ZXJlZCA9IHRydWVcbiAgICAgICAgICAgICAgZG9jcyA9IFtjaGFuZ2UuZG9jXVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZG9jcy5wdXNoKGNoYW5nZS5kb2MpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdlbnF1ZXVlJzoge1xuICAgICAgICAgICAgZG9jcy5wdXNoKGNoYW5nZS5kb2MpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdkZXF1ZXVlJzoge1xuICAgICAgICAgICAgY29uc3QgaW5kID0gZG9jcy5maW5kSW5kZXgoZG9jID0+IGRvYy5faWQgPT09IGNoYW5nZS5kb2NJZClcbiAgICAgICAgICAgIGlmIChpbmQgPiAtMSkge1xuICAgICAgICAgICAgICBkb2NzLnNwbGljZShpbmQsIDEpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBUT0RPIHJlcG9ydFxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbcmVhbHRpbWUgbGlzdGVuZXJdIGludGVybmFsIG5vbi1mYXRhbCBzZXJ2ZXIgZXJyb3I6IHVuZXhwZWN0ZWQgZGVxdWV1ZSBldmVudCB3aGVyZSBubyBkb2MgaXMgYXNzb2NpYXRlZC4nKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAndXBkYXRlJzoge1xuICAgICAgICAgICAgY29uc3QgaW5kID0gZG9jcy5maW5kSW5kZXgoZG9jID0+IGRvYy5faWQgPT09IGNoYW5nZS5kb2NJZClcbiAgICAgICAgICAgIGlmIChpbmQgPiAtMSkge1xuICAgICAgICAgICAgICBkb2NzW2luZF0gPSBjaGFuZ2UuZG9jXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBUT0RPIHJlcG9ydFxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbcmVhbHRpbWUgbGlzdGVuZXJdIGludGVybmFsIG5vbi1mYXRhbCBzZXJ2ZXIgZXJyb3I6IHVuZXhwZWN0ZWQgcXVldWVUeXBlIHVwZGF0ZSBldmVudCB3aGVyZSBubyBkb2MgaXMgYXNzb2NpYXRlZC4nKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgaSA9PT0gbGVuIC0gMVxuICAgICAgICAgIHx8IChhbGxDaGFuZ2VFdmVudHNbaSArIDFdICYmIGFsbENoYW5nZUV2ZW50c1tpICsgMV0uaWQgIT09IGNoYW5nZS5pZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gYSBzaGFsbG93IHNsaWNlIGNyZWF0ZXMgYSBzaGFsbG93IHNuYXBzaG90XG4gICAgICAgICAgY29uc3QgZG9jc1NuYXBzaG90ID0gWy4uLmRvY3NdXG5cbiAgICAgICAgICAvLyB3ZSBzbGljZSBmaXJzdCBjYXVzZScgaWYgdGhlcmUncmUgYWxsQ2hhbmdlRXZlbnRzIHRoYXQgYXJlIG9mIHRoZSBzYW1lIGlkIGFmdGVyIHRoaXMgY2hhbmdlLCB3ZSBkb24ndCB3YW50IHRvIGludm9sdmUgaXQgZm9yIGl0IGlzIHVuZXhwZWN0ZWQgaW52YWxpZCBvcmRlclxuICAgICAgICAgIGNvbnN0IGRvY0NoYW5nZXMgPSBhbGxDaGFuZ2VFdmVudHNcbiAgICAgICAgICAgIC5zbGljZSgwLCBpICsgMSlcbiAgICAgICAgICAgIC5maWx0ZXIoYyA9PiBjLmlkID09PSBjaGFuZ2UuaWQpXG5cbiAgICAgICAgICAvLyBhbGwgY2hhbmdlcyBvZiB0aGlzIGV2ZW50IGhhcyBiZWVuIGhhbmRsZSwgd2UgY291bGQgZGlzcGF0Y2ggdGhlIGV2ZW50IG5vd1xuICAgICAgICAgIHRoaXMuc2Vzc2lvbkluZm8uY3VycmVudEV2ZW50SWQgPSBjaGFuZ2UuaWRcbiAgICAgICAgICB0aGlzLnNlc3Npb25JbmZvLmN1cnJlbnREb2NzID0gZG9jc1xuXG4gICAgICAgICAgY29uc3Qgc25hcHNob3QgPSBuZXcgU25hcHNob3Qoe1xuICAgICAgICAgICAgaWQ6IGNoYW5nZS5pZCxcbiAgICAgICAgICAgIGRvY0NoYW5nZXMsXG4gICAgICAgICAgICBkb2NzOiBkb2NzU25hcHNob3QsXG4gICAgICAgICAgICBtc2dUeXBlLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICB0aGlzLmxpc3RlbmVyLm9uQ2hhbmdlKHNuYXBzaG90KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBvdXQtb2Ytb3JkZXIgZXZlbnRcbiAgICAgICAgLy8gaWYgKHByb2Nlc3MuZW52LkRFQlVHKSB7XG4gICAgICAgIC8vIFRPRE86IHJlcG9ydFxuICAgICAgICBjb25zb2xlLndhcm4oYFtyZWFsdGltZSBsaXN0ZW5lcl0gZXZlbnQgcmVjZWl2ZWQgaXMgb3V0IG9mIG9yZGVyLCBjdXIgJHt0aGlzLnNlc3Npb25JbmZvLmN1cnJlbnRFdmVudElkfSBidXQgZ290ICR7Y2hhbmdlLmlkfWApXG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gcmVidWlsZCB3YXRjaFxuICAgICAgICBhd2FpdCB0aGlzLnJlYnVpbGRXYXRjaCgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcG9zdEhhbmRsZVNlcnZlckV2ZW50c1ZhbGlkaXR5Q2hlY2sobXNnOiBJUmVzcG9uc2VNZXNzYWdlSW5pdEV2ZW50TXNnIHwgSVJlc3BvbnNlTWVzc2FnZU5leHRFdmVudE1zZykge1xuICAgIGlmICghdGhpcy5zZXNzaW9uSW5mbykge1xuICAgICAgY29uc29sZS5lcnJvcignW3JlYWx0aW1lIGxpc3RlbmVyXSBpbnRlcm5hbCBub24tZmF0YWwgZXJyb3I6IHNlc3Npb25JbmZvIGxvc3QgYWZ0ZXIgc2VydmVyIGV2ZW50IGhhbmRsaW5nLCB0aGlzIHNob3VsZCBuZXZlciBvY2N1cicpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnNlc3Npb25JbmZvLmV4cGVjdEV2ZW50SWRcbiAgICAgICYmIHRoaXMuc2Vzc2lvbkluZm8uY3VycmVudEV2ZW50SWQgPj0gdGhpcy5zZXNzaW9uSW5mby5leHBlY3RFdmVudElkXG4gICAgKSB7XG4gICAgICB0aGlzLmNsZWFyV2FpdEV4cGVjdGVkRXZlbnQoKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnNlc3Npb25JbmZvLmN1cnJlbnRFdmVudElkIDwgbXNnLm1zZ0RhdGEuY3VyckV2ZW50KSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tyZWFsdGltZSBsaXN0ZW5lcl0gaW50ZXJuYWwgbm9uLWZhdGFsIGVycm9yOiBjbGllbnQgZXZlbnRJZCBkb2VzIG5vdCBtYXRjaCB3aXRoIHNlcnZlciBldmVudCBpZCBhZnRlciBzZXJ2ZXIgZXZlbnQgaGFuZGxpbmcnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhcldhaXRFeHBlY3RlZEV2ZW50KCkge1xuICAgIGlmICh0aGlzLndhaXRFeHBlY3RlZFRpbWVvdXRJZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMud2FpdEV4cGVjdGVkVGltZW91dElkKVxuICAgICAgdGhpcy53YWl0RXhwZWN0ZWRUaW1lb3V0SWQgPSB1bmRlZmluZWRcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UHVibGljRXZlbnQoZXZlbnQ6IElEQkV2ZW50KTogSVNpbmdsZURCRXZlbnQge1xuICBjb25zdCBlOiBJU2luZ2xlREJFdmVudCA9IHtcbiAgICBpZDogZXZlbnQuSUQsXG4gICAgZGF0YVR5cGU6IGV2ZW50LkRhdGFUeXBlLFxuICAgIHF1ZXVlVHlwZTogZXZlbnQuUXVldWVUeXBlLFxuICAgIGRvY0lkOiBldmVudC5Eb2NJRCxcbiAgICBkb2M6IGV2ZW50LkRvYyAmJiBldmVudC5Eb2MgIT09ICd7fScgPyBKU09OLnBhcnNlKGV2ZW50LkRvYykgOiB1bmRlZmluZWQsXG4gIH1cblxuICBpZiAoZXZlbnQuRGF0YVR5cGUgPT09ICd1cGRhdGUnKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmIChldmVudC5VcGRhdGVkRmllbGRzKSB7XG4gICAgICBlLnVwZGF0ZWRGaWVsZHMgPSBKU09OLnBhcnNlKGV2ZW50LlVwZGF0ZWRGaWVsZHMpXG4gICAgfVxuICAgIC8vIFRPRE86IHdhaXQgZm9yIHRjYiB0byBjaGFuZ2UgcmVtb3ZlZEZpZWxkcyB0byBSZW1vdmVkRmllbGRzXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmIChldmVudC5yZW1vdmVkRmllbGRzIHx8IGV2ZW50LlJlbW92ZWRGaWVsZHMpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIC8vIGUucmVtb3ZlZEZpZWxkcyA9IGV2ZW50LnJlbW92ZWRGaWVsZHNcbiAgICAgIC8vICAgPyBKU09OLnBhcnNlKGV2ZW50LnJlbW92ZWRGaWVsZHMpXG4gICAgICAvLyAgIDogSlNPTi5wYXJzZShldmVudC5SZW1vdmVkRmllbGRzKVxuICAgICAgZS5yZW1vdmVkRmllbGRzID0gSlNPTi5wYXJzZShldmVudC5yZW1vdmVkRmllbGRzKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlXG59XG4iXX0=