@cloudbase/js-sdk 3.4.6 → 3.4.7-beta.0

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