@cloudbase/oauth 0.1.1-alpha.4 → 0.1.1-alpha.6

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 (384) hide show
  1. package/dist/app/index.d.ts +4 -4
  2. package/dist/app/openuri.d.ts +1 -1
  3. package/dist/app/openuri.js +3 -0
  4. package/dist/app/openuri.js.map +1 -1
  5. package/dist/app/request.d.ts +1 -1
  6. package/dist/auth/consts.d.ts +2 -1
  7. package/dist/auth/consts.js +1 -0
  8. package/dist/auth/consts.js.map +1 -1
  9. package/dist/auth/index.d.ts +7 -2
  10. package/dist/auth/index.js +12 -0
  11. package/dist/auth/index.js.map +1 -1
  12. package/dist/auth/models.d.ts +9 -3
  13. package/dist/auth/models.js +0 -1
  14. package/dist/auth/models.js.map +1 -1
  15. package/dist/oauthclient/index.d.ts +4 -4
  16. package/dist/oauthclient/interface.d.ts +1 -1
  17. package/dist/oauthclient/oauthclient.js +1 -1
  18. package/dist/oauthclient/oauthclient.js.map +1 -1
  19. package/dist/package.json +1 -1
  20. package/dist/utils/base64.d.ts +3 -2
  21. package/dist/utils/base64.js +24 -22
  22. package/dist/utils/base64.js.map +1 -1
  23. package/package.json +1 -1
  24. package/packages/analytics/dist/cjs/index.d.ts +2 -0
  25. package/packages/analytics/dist/cjs/index.js +144 -0
  26. package/packages/analytics/dist/esm/index.d.ts +2 -0
  27. package/packages/analytics/dist/esm/index.js +140 -0
  28. package/packages/app/dist/cjs/constants/common.d.ts +24 -0
  29. package/packages/app/dist/cjs/constants/common.js +68 -0
  30. package/packages/app/dist/cjs/index.d.ts +4 -0
  31. package/packages/app/dist/cjs/index.js +248 -0
  32. package/packages/app/dist/cjs/libs/adapter.d.ts +2 -0
  33. package/packages/app/dist/cjs/libs/adapter.js +5 -0
  34. package/packages/app/dist/cjs/libs/cache.d.ts +6 -0
  35. package/packages/app/dist/cjs/libs/cache.js +38 -0
  36. package/packages/app/dist/cjs/libs/component.d.ts +3 -0
  37. package/packages/app/dist/cjs/libs/component.js +126 -0
  38. package/packages/app/dist/cjs/libs/request.d.ts +28 -0
  39. package/packages/app/dist/cjs/libs/request.js +297 -0
  40. package/packages/app/dist/esm/constants/common.d.ts +24 -0
  41. package/packages/app/dist/esm/constants/common.js +57 -0
  42. package/packages/app/dist/esm/index.d.ts +4 -0
  43. package/packages/app/dist/esm/index.js +241 -0
  44. package/packages/app/dist/esm/libs/adapter.d.ts +2 -0
  45. package/packages/app/dist/esm/libs/adapter.js +2 -0
  46. package/packages/app/dist/esm/libs/cache.d.ts +6 -0
  47. package/packages/app/dist/esm/libs/cache.js +32 -0
  48. package/packages/app/dist/esm/libs/component.d.ts +3 -0
  49. package/packages/app/dist/esm/libs/component.js +121 -0
  50. package/packages/app/dist/esm/libs/request.d.ts +28 -0
  51. package/packages/app/dist/esm/libs/request.js +292 -0
  52. package/packages/auth/dist/cjs/index.d.ts +100 -0
  53. package/packages/auth/dist/cjs/index.js +1011 -0
  54. package/packages/auth/dist/esm/index.d.ts +100 -0
  55. package/packages/auth/dist/esm/index.js +1007 -0
  56. package/packages/cloudbase/analytics/dist/index.d.ts +2 -0
  57. package/packages/cloudbase/analytics/dist/index.esm.js +4 -0
  58. package/packages/cloudbase/analytics/dist/index.js +9 -0
  59. package/packages/cloudbase/app/dist/index.d.ts +9 -0
  60. package/packages/cloudbase/app/dist/index.esm.js +10 -0
  61. package/packages/cloudbase/app/dist/index.js +17 -0
  62. package/packages/cloudbase/auth/dist/index.d.ts +2 -0
  63. package/packages/cloudbase/auth/dist/index.esm.js +4 -0
  64. package/packages/cloudbase/auth/dist/index.js +9 -0
  65. package/packages/cloudbase/container/dist/index.d.ts +2 -0
  66. package/packages/cloudbase/container/dist/index.esm.js +4 -0
  67. package/packages/cloudbase/container/dist/index.js +9 -0
  68. package/packages/cloudbase/dist/index.cjs.js +31 -0
  69. package/packages/cloudbase/dist/index.esm.js +26 -0
  70. package/packages/cloudbase/functions/dist/index.d.ts +2 -0
  71. package/packages/cloudbase/functions/dist/index.esm.js +4 -0
  72. package/packages/cloudbase/functions/dist/index.js +9 -0
  73. package/packages/cloudbase/oauth/dist/index.d.ts +1 -0
  74. package/packages/cloudbase/oauth/dist/index.esm.js +3 -0
  75. package/packages/cloudbase/oauth/dist/index.js +21 -0
  76. package/packages/cloudbase/realtime/dist/index.d.ts +2 -0
  77. package/packages/cloudbase/realtime/dist/index.esm.js +4 -0
  78. package/packages/cloudbase/realtime/dist/index.js +9 -0
  79. package/packages/cloudbase/src/dist/oauth/src/index.d.ts +1 -0
  80. package/packages/cloudbase/src/dist/src/index.d.ts +9 -0
  81. package/packages/cloudbase/storage/dist/index.d.ts +2 -0
  82. package/packages/cloudbase/storage/dist/index.esm.js +4 -0
  83. package/packages/cloudbase/storage/dist/index.js +9 -0
  84. package/packages/container/dist/cjs/constants/index.d.ts +1 -0
  85. package/packages/container/dist/cjs/constants/index.js +5 -0
  86. package/packages/container/dist/cjs/go_wams_exec.d.ts +2 -0
  87. package/packages/container/dist/cjs/go_wams_exec.js +538 -0
  88. package/packages/container/dist/cjs/index.d.ts +2 -0
  89. package/packages/container/dist/cjs/index.js +418 -0
  90. package/packages/container/dist/cjs/utils/index.d.ts +3 -0
  91. package/packages/container/dist/cjs/utils/index.js +65 -0
  92. package/packages/container/dist/cjs/utils/request.d.ts +12 -0
  93. package/packages/container/dist/cjs/utils/request.js +105 -0
  94. package/packages/container/dist/esm/constants/index.d.ts +1 -0
  95. package/packages/container/dist/esm/constants/index.js +2 -0
  96. package/packages/container/dist/esm/go_wams_exec.d.ts +2 -0
  97. package/packages/container/dist/esm/go_wams_exec.js +536 -0
  98. package/packages/container/dist/esm/index.d.ts +2 -0
  99. package/packages/container/dist/esm/index.js +411 -0
  100. package/packages/container/dist/esm/utils/index.d.ts +3 -0
  101. package/packages/container/dist/esm/utils/index.js +59 -0
  102. package/packages/container/dist/esm/utils/request.d.ts +12 -0
  103. package/packages/container/dist/esm/utils/request.js +101 -0
  104. package/packages/container/node_modules/@cloudbase/types/LICENSE +202 -0
  105. package/packages/container/node_modules/@cloudbase/types/auth.d.ts +78 -0
  106. package/packages/container/node_modules/@cloudbase/types/cache.d.ts +26 -0
  107. package/packages/container/node_modules/@cloudbase/types/component.d.ts +17 -0
  108. package/packages/container/node_modules/@cloudbase/types/database.d.ts +31 -0
  109. package/packages/container/node_modules/@cloudbase/types/events.d.ts +13 -0
  110. package/packages/container/node_modules/@cloudbase/types/functions.d.ts +16 -0
  111. package/packages/container/node_modules/@cloudbase/types/index.d.ts +66 -0
  112. package/packages/container/node_modules/@cloudbase/types/index.js +1 -0
  113. package/packages/container/node_modules/@cloudbase/types/package.json +46 -0
  114. package/packages/container/node_modules/@cloudbase/types/realtime.d.ts +350 -0
  115. package/packages/container/node_modules/@cloudbase/types/request.d.ts +28 -0
  116. package/packages/container/node_modules/@cloudbase/types/storage.d.ts +97 -0
  117. package/packages/container/node_modules/@cloudbase/utilities/.eslintignore +2 -0
  118. package/packages/container/node_modules/@cloudbase/utilities/.eslintrc.js +15 -0
  119. package/packages/container/node_modules/@cloudbase/utilities/LICENSE +202 -0
  120. package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/adapters/index.d.ts +13 -0
  121. package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/adapters/index.js +55 -0
  122. package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/adapters/platforms/web.d.ts +15 -0
  123. package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/adapters/platforms/web.js +215 -0
  124. package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/constants/common.d.ts +6 -0
  125. package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/constants/common.js +24 -0
  126. package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/constants/errors.d.ts +8 -0
  127. package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/constants/errors.js +12 -0
  128. package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/constants/index.d.ts +3 -0
  129. package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/constants/index.js +21 -0
  130. package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/helpers/decorators.d.ts +11 -0
  131. package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/helpers/decorators.js +238 -0
  132. package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/helpers/index.d.ts +1 -0
  133. package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/helpers/index.js +18 -0
  134. package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/index.d.ts +11 -0
  135. package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/index.js +47 -0
  136. package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/libs/cache.d.ts +17 -0
  137. package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/libs/cache.js +261 -0
  138. package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/libs/events.d.ts +27 -0
  139. package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/libs/events.js +108 -0
  140. package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/libs/util.d.ts +35 -0
  141. package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/libs/util.js +223 -0
  142. package/packages/container/node_modules/@cloudbase/utilities/dist/esm/adapters/index.d.ts +13 -0
  143. package/packages/container/node_modules/@cloudbase/utilities/dist/esm/adapters/index.js +27 -0
  144. package/packages/container/node_modules/@cloudbase/utilities/dist/esm/adapters/platforms/web.d.ts +15 -0
  145. package/packages/container/node_modules/@cloudbase/utilities/dist/esm/adapters/platforms/web.js +211 -0
  146. package/packages/container/node_modules/@cloudbase/utilities/dist/esm/constants/common.d.ts +6 -0
  147. package/packages/container/node_modules/@cloudbase/utilities/dist/esm/constants/common.js +17 -0
  148. package/packages/container/node_modules/@cloudbase/utilities/dist/esm/constants/errors.d.ts +8 -0
  149. package/packages/container/node_modules/@cloudbase/utilities/dist/esm/constants/errors.js +9 -0
  150. package/packages/container/node_modules/@cloudbase/utilities/dist/esm/constants/index.d.ts +3 -0
  151. package/packages/container/node_modules/@cloudbase/utilities/dist/esm/constants/index.js +4 -0
  152. package/packages/container/node_modules/@cloudbase/utilities/dist/esm/helpers/decorators.d.ts +11 -0
  153. package/packages/container/node_modules/@cloudbase/utilities/dist/esm/helpers/decorators.js +234 -0
  154. package/packages/container/node_modules/@cloudbase/utilities/dist/esm/helpers/index.d.ts +1 -0
  155. package/packages/container/node_modules/@cloudbase/utilities/dist/esm/helpers/index.js +2 -0
  156. package/packages/container/node_modules/@cloudbase/utilities/dist/esm/index.d.ts +11 -0
  157. package/packages/container/node_modules/@cloudbase/utilities/dist/esm/index.js +12 -0
  158. package/packages/container/node_modules/@cloudbase/utilities/dist/esm/libs/cache.d.ts +17 -0
  159. package/packages/container/node_modules/@cloudbase/utilities/dist/esm/libs/cache.js +258 -0
  160. package/packages/container/node_modules/@cloudbase/utilities/dist/esm/libs/events.d.ts +27 -0
  161. package/packages/container/node_modules/@cloudbase/utilities/dist/esm/libs/events.js +102 -0
  162. package/packages/container/node_modules/@cloudbase/utilities/dist/esm/libs/util.d.ts +35 -0
  163. package/packages/container/node_modules/@cloudbase/utilities/dist/esm/libs/util.js +194 -0
  164. package/packages/container/node_modules/@cloudbase/utilities/package.json +32 -0
  165. package/packages/container/node_modules/@cloudbase/utilities/src/adapters/index.ts +28 -0
  166. package/packages/container/node_modules/@cloudbase/utilities/src/adapters/platforms/web.ts +182 -0
  167. package/packages/container/node_modules/@cloudbase/utilities/src/constants/common.ts +21 -0
  168. package/packages/container/node_modules/@cloudbase/utilities/src/constants/errors.ts +8 -0
  169. package/packages/container/node_modules/@cloudbase/utilities/src/constants/index.ts +4 -0
  170. package/packages/container/node_modules/@cloudbase/utilities/src/global.d.ts +3 -0
  171. package/packages/container/node_modules/@cloudbase/utilities/src/helpers/decorators.ts +228 -0
  172. package/packages/container/node_modules/@cloudbase/utilities/src/helpers/index.ts +1 -0
  173. package/packages/container/node_modules/@cloudbase/utilities/src/index.ts +22 -0
  174. package/packages/container/node_modules/@cloudbase/utilities/src/libs/cache.ts +192 -0
  175. package/packages/container/node_modules/@cloudbase/utilities/src/libs/events.ts +154 -0
  176. package/packages/container/node_modules/@cloudbase/utilities/src/libs/util.ts +216 -0
  177. package/packages/container/node_modules/@cloudbase/utilities/tsconfig.esm.json +16 -0
  178. package/packages/container/node_modules/@cloudbase/utilities/tsconfig.json +21 -0
  179. package/packages/container/node_modules/crypto-js/CONTRIBUTING.md +28 -0
  180. package/packages/container/node_modules/crypto-js/LICENSE +24 -0
  181. package/packages/container/node_modules/crypto-js/README.md +261 -0
  182. package/packages/container/node_modules/crypto-js/aes.js +234 -0
  183. package/packages/container/node_modules/crypto-js/bower.json +39 -0
  184. package/packages/container/node_modules/crypto-js/cipher-core.js +890 -0
  185. package/packages/container/node_modules/crypto-js/core.js +807 -0
  186. package/packages/container/node_modules/crypto-js/crypto-js.js +6191 -0
  187. package/packages/container/node_modules/crypto-js/docs/QuickStartGuide.wiki +470 -0
  188. package/packages/container/node_modules/crypto-js/enc-base64.js +136 -0
  189. package/packages/container/node_modules/crypto-js/enc-base64url.js +140 -0
  190. package/packages/container/node_modules/crypto-js/enc-hex.js +18 -0
  191. package/packages/container/node_modules/crypto-js/enc-latin1.js +18 -0
  192. package/packages/container/node_modules/crypto-js/enc-utf16.js +149 -0
  193. package/packages/container/node_modules/crypto-js/enc-utf8.js +18 -0
  194. package/packages/container/node_modules/crypto-js/evpkdf.js +134 -0
  195. package/packages/container/node_modules/crypto-js/format-hex.js +66 -0
  196. package/packages/container/node_modules/crypto-js/format-openssl.js +18 -0
  197. package/packages/container/node_modules/crypto-js/hmac-md5.js +18 -0
  198. package/packages/container/node_modules/crypto-js/hmac-ripemd160.js +18 -0
  199. package/packages/container/node_modules/crypto-js/hmac-sha1.js +18 -0
  200. package/packages/container/node_modules/crypto-js/hmac-sha224.js +18 -0
  201. package/packages/container/node_modules/crypto-js/hmac-sha256.js +18 -0
  202. package/packages/container/node_modules/crypto-js/hmac-sha3.js +18 -0
  203. package/packages/container/node_modules/crypto-js/hmac-sha384.js +18 -0
  204. package/packages/container/node_modules/crypto-js/hmac-sha512.js +18 -0
  205. package/packages/container/node_modules/crypto-js/hmac.js +143 -0
  206. package/packages/container/node_modules/crypto-js/index.js +18 -0
  207. package/packages/container/node_modules/crypto-js/lib-typedarrays.js +76 -0
  208. package/packages/container/node_modules/crypto-js/md5.js +268 -0
  209. package/packages/container/node_modules/crypto-js/mode-cfb.js +80 -0
  210. package/packages/container/node_modules/crypto-js/mode-ctr-gladman.js +116 -0
  211. package/packages/container/node_modules/crypto-js/mode-ctr.js +58 -0
  212. package/packages/container/node_modules/crypto-js/mode-ecb.js +40 -0
  213. package/packages/container/node_modules/crypto-js/mode-ofb.js +54 -0
  214. package/packages/container/node_modules/crypto-js/package.json +42 -0
  215. package/packages/container/node_modules/crypto-js/pad-ansix923.js +49 -0
  216. package/packages/container/node_modules/crypto-js/pad-iso10126.js +44 -0
  217. package/packages/container/node_modules/crypto-js/pad-iso97971.js +40 -0
  218. package/packages/container/node_modules/crypto-js/pad-nopadding.js +30 -0
  219. package/packages/container/node_modules/crypto-js/pad-pkcs7.js +18 -0
  220. package/packages/container/node_modules/crypto-js/pad-zeropadding.js +47 -0
  221. package/packages/container/node_modules/crypto-js/pbkdf2.js +145 -0
  222. package/packages/container/node_modules/crypto-js/rabbit-legacy.js +190 -0
  223. package/packages/container/node_modules/crypto-js/rabbit.js +192 -0
  224. package/packages/container/node_modules/crypto-js/rc4.js +139 -0
  225. package/packages/container/node_modules/crypto-js/ripemd160.js +267 -0
  226. package/packages/container/node_modules/crypto-js/sha1.js +150 -0
  227. package/packages/container/node_modules/crypto-js/sha224.js +80 -0
  228. package/packages/container/node_modules/crypto-js/sha256.js +199 -0
  229. package/packages/container/node_modules/crypto-js/sha3.js +326 -0
  230. package/packages/container/node_modules/crypto-js/sha384.js +83 -0
  231. package/packages/container/node_modules/crypto-js/sha512.js +326 -0
  232. package/packages/container/node_modules/crypto-js/tripledes.js +779 -0
  233. package/packages/container/node_modules/crypto-js/x64-core.js +304 -0
  234. package/packages/functions/dist/cjs/index.d.ts +2 -0
  235. package/packages/functions/dist/cjs/index.js +165 -0
  236. package/packages/functions/dist/esm/index.d.ts +2 -0
  237. package/packages/functions/dist/esm/index.js +161 -0
  238. package/packages/oauth/dist/cjs/auth/apis.d.ts +78 -0
  239. package/packages/oauth/dist/cjs/auth/apis.js +726 -0
  240. package/packages/oauth/dist/cjs/auth/consts.d.ts +64 -0
  241. package/packages/oauth/dist/cjs/auth/consts.js +72 -0
  242. package/packages/oauth/dist/cjs/auth/models.d.ts +378 -0
  243. package/packages/oauth/dist/cjs/auth/models.js +3 -0
  244. package/packages/oauth/dist/cjs/captcha/captcha.d.ts +35 -0
  245. package/packages/oauth/dist/cjs/captcha/captcha.js +264 -0
  246. package/packages/oauth/dist/cjs/index.d.ts +14 -0
  247. package/packages/oauth/dist/cjs/index.js +70 -0
  248. package/packages/oauth/dist/cjs/oauth2client/consts.d.ts +67 -0
  249. package/packages/oauth/dist/cjs/oauth2client/consts.js +73 -0
  250. package/packages/oauth/dist/cjs/oauth2client/interface.d.ts +15 -0
  251. package/packages/oauth/dist/cjs/oauth2client/interface.js +10 -0
  252. package/packages/oauth/dist/cjs/oauth2client/models.d.ts +50 -0
  253. package/packages/oauth/dist/cjs/oauth2client/models.js +3 -0
  254. package/packages/oauth/dist/cjs/oauth2client/oauth2client.d.ts +58 -0
  255. package/packages/oauth/dist/cjs/oauth2client/oauth2client.js +687 -0
  256. package/packages/oauth/dist/cjs/utils/encrypt.d.ts +4 -0
  257. package/packages/oauth/dist/cjs/utils/encrypt.js +25 -0
  258. package/packages/oauth/dist/cjs/utils/encryptlong/index.d.ts +154 -0
  259. package/packages/oauth/dist/cjs/utils/encryptlong/index.js +4029 -0
  260. package/packages/oauth/dist/cjs/utils/function/single-promise.d.ts +5 -0
  261. package/packages/oauth/dist/cjs/utils/function/single-promise.js +96 -0
  262. package/packages/oauth/dist/cjs/utils/index.d.ts +1 -0
  263. package/packages/oauth/dist/cjs/utils/index.js +49 -0
  264. package/packages/oauth/dist/cjs/utils/uuid.d.ts +1 -0
  265. package/packages/oauth/dist/cjs/utils/uuid.js +12 -0
  266. package/packages/oauth/dist/esm/auth/apis.d.ts +78 -0
  267. package/packages/oauth/dist/esm/auth/apis.js +724 -0
  268. package/packages/oauth/dist/esm/auth/consts.d.ts +64 -0
  269. package/packages/oauth/dist/esm/auth/consts.js +69 -0
  270. package/packages/oauth/dist/esm/auth/models.d.ts +378 -0
  271. package/packages/oauth/dist/esm/auth/models.js +2 -0
  272. package/packages/oauth/dist/esm/captcha/captcha.d.ts +35 -0
  273. package/packages/oauth/dist/esm/captcha/captcha.js +261 -0
  274. package/packages/oauth/dist/esm/index.d.ts +14 -0
  275. package/packages/oauth/dist/esm/index.js +35 -0
  276. package/packages/oauth/dist/esm/oauth2client/consts.d.ts +67 -0
  277. package/packages/oauth/dist/esm/oauth2client/consts.js +70 -0
  278. package/packages/oauth/dist/esm/oauth2client/interface.d.ts +15 -0
  279. package/packages/oauth/dist/esm/oauth2client/interface.js +7 -0
  280. package/packages/oauth/dist/esm/oauth2client/models.d.ts +50 -0
  281. package/packages/oauth/dist/esm/oauth2client/models.js +2 -0
  282. package/packages/oauth/dist/esm/oauth2client/oauth2client.d.ts +58 -0
  283. package/packages/oauth/dist/esm/oauth2client/oauth2client.js +681 -0
  284. package/packages/oauth/dist/esm/utils/encrypt.d.ts +4 -0
  285. package/packages/oauth/dist/esm/utils/encrypt.js +18 -0
  286. package/packages/oauth/dist/esm/utils/encryptlong/index.d.ts +154 -0
  287. package/packages/oauth/dist/esm/utils/encryptlong/index.js +4027 -0
  288. package/packages/oauth/dist/esm/utils/function/single-promise.d.ts +5 -0
  289. package/packages/oauth/dist/esm/utils/function/single-promise.js +93 -0
  290. package/packages/oauth/dist/esm/utils/index.d.ts +1 -0
  291. package/packages/oauth/dist/esm/utils/index.js +45 -0
  292. package/packages/oauth/dist/esm/utils/uuid.d.ts +1 -0
  293. package/packages/oauth/dist/esm/utils/uuid.js +8 -0
  294. package/packages/packages/cloudbase/src/dist/oauth/src/index.d.ts +1 -0
  295. package/packages/packages/cloudbase/src/dist/src/index.d.ts +9 -0
  296. package/packages/realtime/dist/cjs/common.d.ts +4 -0
  297. package/packages/realtime/dist/cjs/common.js +22 -0
  298. package/packages/realtime/dist/cjs/error.d.ts +36 -0
  299. package/packages/realtime/dist/cjs/error.js +106 -0
  300. package/packages/realtime/dist/cjs/index.d.ts +2 -0
  301. package/packages/realtime/dist/cjs/index.js +36 -0
  302. package/packages/realtime/dist/cjs/listener.d.ts +14 -0
  303. package/packages/realtime/dist/cjs/listener.js +18 -0
  304. package/packages/realtime/dist/cjs/message.d.ts +3 -0
  305. package/packages/realtime/dist/cjs/message.js +13 -0
  306. package/packages/realtime/dist/cjs/snapshot.d.ts +17 -0
  307. package/packages/realtime/dist/cjs/snapshot.js +45 -0
  308. package/packages/realtime/dist/cjs/utils.d.ts +1 -0
  309. package/packages/realtime/dist/cjs/utils.js +9 -0
  310. package/packages/realtime/dist/cjs/virtual-websocket-client.d.ts +62 -0
  311. package/packages/realtime/dist/cjs/websocket-client.d.ts +78 -0
  312. package/packages/realtime/dist/cjs/ws-event.d.ts +126 -0
  313. package/packages/realtime/dist/cjs/ws-event.js +141 -0
  314. package/packages/realtime/dist/esm/common.d.ts +4 -0
  315. package/packages/realtime/dist/esm/common.js +15 -0
  316. package/packages/realtime/dist/esm/error.d.ts +36 -0
  317. package/packages/realtime/dist/esm/error.js +100 -0
  318. package/packages/realtime/dist/esm/index.d.ts +2 -0
  319. package/packages/realtime/dist/esm/index.js +32 -0
  320. package/packages/realtime/dist/esm/listener.d.ts +14 -0
  321. package/packages/realtime/dist/esm/listener.js +15 -0
  322. package/packages/realtime/dist/esm/message.d.ts +3 -0
  323. package/packages/realtime/dist/esm/message.js +8 -0
  324. package/packages/realtime/dist/esm/snapshot.d.ts +17 -0
  325. package/packages/realtime/dist/esm/snapshot.js +42 -0
  326. package/packages/realtime/dist/esm/utils.d.ts +1 -0
  327. package/packages/realtime/dist/esm/utils.js +5 -0
  328. package/packages/realtime/dist/esm/virtual-websocket-client.d.ts +62 -0
  329. package/packages/realtime/dist/esm/websocket-client.d.ts +78 -0
  330. package/packages/realtime/dist/esm/ws-event.d.ts +126 -0
  331. package/packages/realtime/dist/esm/ws-event.js +137 -0
  332. package/packages/storage/dist/cjs/index.d.ts +2 -0
  333. package/packages/storage/dist/cjs/index.js +426 -0
  334. package/packages/storage/dist/esm/index.d.ts +2 -0
  335. package/packages/storage/dist/esm/index.js +422 -0
  336. package/packages/utilities/dist/cjs/adapters/index.d.ts +13 -0
  337. package/packages/utilities/dist/cjs/adapters/index.js +55 -0
  338. package/packages/utilities/dist/cjs/adapters/platforms/web.d.ts +15 -0
  339. package/packages/utilities/dist/cjs/adapters/platforms/web.js +215 -0
  340. package/packages/utilities/dist/cjs/constants/common.d.ts +6 -0
  341. package/packages/utilities/dist/cjs/constants/common.js +24 -0
  342. package/packages/utilities/dist/cjs/constants/errors.d.ts +8 -0
  343. package/packages/utilities/dist/cjs/constants/errors.js +12 -0
  344. package/packages/utilities/dist/cjs/constants/index.d.ts +3 -0
  345. package/packages/utilities/dist/cjs/constants/index.js +21 -0
  346. package/packages/utilities/dist/cjs/helpers/decorators.d.ts +11 -0
  347. package/packages/utilities/dist/cjs/helpers/decorators.js +238 -0
  348. package/packages/utilities/dist/cjs/helpers/index.d.ts +1 -0
  349. package/packages/utilities/dist/cjs/helpers/index.js +18 -0
  350. package/packages/utilities/dist/cjs/index.d.ts +11 -0
  351. package/packages/utilities/dist/cjs/index.js +47 -0
  352. package/packages/utilities/dist/cjs/libs/cache.d.ts +17 -0
  353. package/packages/utilities/dist/cjs/libs/cache.js +261 -0
  354. package/packages/utilities/dist/cjs/libs/events.d.ts +27 -0
  355. package/packages/utilities/dist/cjs/libs/events.js +108 -0
  356. package/packages/utilities/dist/cjs/libs/util.d.ts +34 -0
  357. package/packages/utilities/dist/cjs/libs/util.js +198 -0
  358. package/packages/utilities/dist/esm/adapters/index.d.ts +13 -0
  359. package/packages/utilities/dist/esm/adapters/index.js +27 -0
  360. package/packages/utilities/dist/esm/adapters/platforms/web.d.ts +15 -0
  361. package/packages/utilities/dist/esm/adapters/platforms/web.js +211 -0
  362. package/packages/utilities/dist/esm/constants/common.d.ts +6 -0
  363. package/packages/utilities/dist/esm/constants/common.js +17 -0
  364. package/packages/utilities/dist/esm/constants/errors.d.ts +8 -0
  365. package/packages/utilities/dist/esm/constants/errors.js +9 -0
  366. package/packages/utilities/dist/esm/constants/index.d.ts +3 -0
  367. package/packages/utilities/dist/esm/constants/index.js +4 -0
  368. package/packages/utilities/dist/esm/helpers/decorators.d.ts +11 -0
  369. package/packages/utilities/dist/esm/helpers/decorators.js +234 -0
  370. package/packages/utilities/dist/esm/helpers/index.d.ts +1 -0
  371. package/packages/utilities/dist/esm/helpers/index.js +2 -0
  372. package/packages/utilities/dist/esm/index.d.ts +11 -0
  373. package/packages/utilities/dist/esm/index.js +12 -0
  374. package/packages/utilities/dist/esm/libs/cache.d.ts +17 -0
  375. package/packages/utilities/dist/esm/libs/cache.js +258 -0
  376. package/packages/utilities/dist/esm/libs/events.d.ts +27 -0
  377. package/packages/utilities/dist/esm/libs/events.js +102 -0
  378. package/packages/utilities/dist/esm/libs/util.d.ts +34 -0
  379. package/packages/utilities/dist/esm/libs/util.js +173 -0
  380. package/src/app/openuri.ts +3 -0
  381. package/src/auth/consts.ts +1 -0
  382. package/src/auth/index.ts +14 -0
  383. package/src/auth/models.ts +9 -5
  384. package/src/utils/base64.ts +35 -27
@@ -0,0 +1,1011 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
14
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
15
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
16
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
17
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
18
+ };
19
+ var __metadata = (this && this.__metadata) || function (k, v) {
20
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
21
+ };
22
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
23
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
24
+ return new (P || (P = Promise))(function (resolve, reject) {
25
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
26
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
27
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
28
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
29
+ });
30
+ };
31
+ var __generator = (this && this.__generator) || function (thisArg, body) {
32
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
33
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
34
+ function verb(n) { return function (v) { return step([n, v]); }; }
35
+ function step(op) {
36
+ if (f) throw new TypeError("Generator is already executing.");
37
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
38
+ 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;
39
+ if (y = 0, t) op = [op[0] & 2, t.value];
40
+ switch (op[0]) {
41
+ case 0: case 1: t = op; break;
42
+ case 4: _.label++; return { value: op[1], done: false };
43
+ case 5: _.label++; y = op[1]; op = [0]; continue;
44
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
45
+ default:
46
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
47
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
48
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
49
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
50
+ if (t[2]) _.ops.pop();
51
+ _.trys.pop(); continue;
52
+ }
53
+ op = body.call(thisArg, _);
54
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
55
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
56
+ }
57
+ };
58
+ Object.defineProperty(exports, "__esModule", { value: true });
59
+ exports.registerAuth = exports.Auth = exports.LoginState = void 0;
60
+ var utilities_1 = require("@cloudbase/utilities");
61
+ var oauth_1 = require("@cloudbase/oauth");
62
+ var printWarn = utilities_1.utils.printWarn, throwError = utilities_1.utils.throwError;
63
+ var ERRORS = utilities_1.constants.ERRORS, COMMUNITY_SITE_URL = utilities_1.constants.COMMUNITY_SITE_URL;
64
+ var catchErrorsDecorator = utilities_1.helpers.catchErrorsDecorator;
65
+ var CloudbaseEventEmitter = utilities_1.events.CloudbaseEventEmitter;
66
+ var COMPONENT_NAME = 'auth';
67
+ var EVENTS = {
68
+ LOGIN_STATE_CHANGED: 'loginStateChanged',
69
+ };
70
+ var eventBus = new CloudbaseEventEmitter();
71
+ var User = (function () {
72
+ function User(options) {
73
+ var cache = options.cache, oauthInstance = options.oauthInstance;
74
+ this.cache = cache;
75
+ this.oauthInstance = oauthInstance;
76
+ this.setUserInfo();
77
+ }
78
+ User.prototype.checkLocalInfo = function () {
79
+ return __awaiter(this, void 0, void 0, function () {
80
+ return __generator(this, function (_a) {
81
+ this.uid = this.getLocalUserInfo('uid');
82
+ this.gender = this.getLocalUserInfo('gender');
83
+ this.picture = this.getLocalUserInfo('picture');
84
+ this.email = this.getLocalUserInfo('email');
85
+ this.emailVerified = this.getLocalUserInfo('email_verified');
86
+ this.phoneNumber = this.getLocalUserInfo('phone_number');
87
+ this.username = this.getLocalUserInfo('username');
88
+ this.name = this.getLocalUserInfo('name');
89
+ this.birthdate = this.getLocalUserInfo('birthdate');
90
+ this.zoneinfo = this.getLocalUserInfo('zoneinfo');
91
+ this.locale = this.getLocalUserInfo('locale');
92
+ this.sub = this.getLocalUserInfo('sub');
93
+ this.createdFrom = this.getLocalUserInfo('created_from');
94
+ this.providers = this.getLocalUserInfo('providers');
95
+ return [2];
96
+ });
97
+ });
98
+ };
99
+ User.prototype.checkLocalInfoAsync = function () {
100
+ return __awaiter(this, void 0, void 0, function () {
101
+ var _a, _b, _c, _d;
102
+ return __generator(this, function (_e) {
103
+ switch (_e.label) {
104
+ case 0:
105
+ _a = this;
106
+ return [4, this.getLocalUserInfoAsync('uid')];
107
+ case 1:
108
+ _a.uid = _e.sent();
109
+ _b = this;
110
+ return [4, this.getLocalUserInfoAsync('gender')];
111
+ case 2:
112
+ _b.gender = _e.sent();
113
+ this.picture = this.getLocalUserInfo('picture');
114
+ _c = this;
115
+ return [4, this.getLocalUserInfoAsync('email')];
116
+ case 3:
117
+ _c.email = _e.sent();
118
+ this.emailVerified = this.getLocalUserInfo('email_verified');
119
+ this.phoneNumber = this.getLocalUserInfo('phone_number');
120
+ _d = this;
121
+ return [4, this.getLocalUserInfoAsync('username')];
122
+ case 4:
123
+ _d.username = _e.sent();
124
+ this.name = this.getLocalUserInfo('name');
125
+ this.birthdate = this.getLocalUserInfo('birthdate');
126
+ this.zoneinfo = this.getLocalUserInfo('zoneinfo');
127
+ this.locale = this.getLocalUserInfo('locale');
128
+ this.sub = this.getLocalUserInfo('sub');
129
+ this.createdFrom = this.getLocalUserInfo('created_from');
130
+ this.providers = this.getLocalUserInfo('providers');
131
+ return [2];
132
+ }
133
+ });
134
+ });
135
+ };
136
+ User.prototype.update = function (userInfo) {
137
+ return __awaiter(this, void 0, void 0, function () {
138
+ var newUserInfo;
139
+ return __generator(this, function (_a) {
140
+ switch (_a.label) {
141
+ case 0: return [4, this.oauthInstance.authApi.setUserProfile(__assign({}, userInfo))];
142
+ case 1:
143
+ newUserInfo = _a.sent();
144
+ this.setLocalUserInfo(newUserInfo);
145
+ return [2];
146
+ }
147
+ });
148
+ });
149
+ };
150
+ User.prototype.updatePassword = function (newPassword, oldPassword) {
151
+ return this.oauthInstance.authApi.updatePasswordByOld({
152
+ old_password: oldPassword,
153
+ new_password: newPassword,
154
+ });
155
+ };
156
+ User.prototype.updateUsername = function (username) {
157
+ if (typeof username !== 'string') {
158
+ throwError(ERRORS.INVALID_PARAMS, 'username must be a string');
159
+ }
160
+ return this.update({
161
+ username: username,
162
+ });
163
+ };
164
+ User.prototype.refresh = function (params) {
165
+ return __awaiter(this, void 0, void 0, function () {
166
+ var newUserInfo;
167
+ return __generator(this, function (_a) {
168
+ switch (_a.label) {
169
+ case 0: return [4, this.oauthInstance.authApi.getUserInfo(params)];
170
+ case 1:
171
+ newUserInfo = _a.sent();
172
+ this.setLocalUserInfo(newUserInfo);
173
+ return [2, newUserInfo];
174
+ }
175
+ });
176
+ });
177
+ };
178
+ User.prototype.getLocalUserInfo = function (key) {
179
+ var userInfoKey = this.cache.keys.userInfoKey;
180
+ var userInfo = this.cache.getStore(userInfoKey);
181
+ return userInfo[key];
182
+ };
183
+ User.prototype.getLocalUserInfoAsync = function (key) {
184
+ return __awaiter(this, void 0, void 0, function () {
185
+ var userInfoKey, userInfo;
186
+ return __generator(this, function (_a) {
187
+ switch (_a.label) {
188
+ case 0:
189
+ userInfoKey = this.cache.keys.userInfoKey;
190
+ return [4, this.cache.getStoreAsync(userInfoKey)];
191
+ case 1:
192
+ userInfo = _a.sent();
193
+ return [2, userInfo[key]];
194
+ }
195
+ });
196
+ });
197
+ };
198
+ User.prototype.setUserInfo = function () {
199
+ var _this = this;
200
+ var userInfoKey = this.cache.keys.userInfoKey;
201
+ var userInfo = this.cache.getStore(userInfoKey);
202
+ [
203
+ 'uid',
204
+ 'email',
205
+ 'name',
206
+ 'gender',
207
+ 'picture',
208
+ 'email_verified',
209
+ 'phone_number',
210
+ 'birthdate',
211
+ 'zoneinfo',
212
+ 'locale',
213
+ 'sub',
214
+ 'created_from',
215
+ 'providers',
216
+ 'username',
217
+ ].forEach(function (infoKey) {
218
+ _this[infoKey] = userInfo[infoKey];
219
+ });
220
+ };
221
+ User.prototype.setLocalUserInfo = function (userInfo) {
222
+ var userInfoKey = this.cache.keys.userInfoKey;
223
+ this.cache.setStore(userInfoKey, userInfo);
224
+ this.setUserInfo();
225
+ };
226
+ __decorate([
227
+ catchErrorsDecorator({
228
+ title: '更新用户信息失败',
229
+ messages: [
230
+ '请确认以下各项:',
231
+ ' 1 - 调用 User.update() 的语法或参数是否正确',
232
+ ' 2 - 用户信息中是否包含非法值',
233
+ "\u5982\u679C\u95EE\u9898\u4F9D\u7136\u5B58\u5728\uFF0C\u5EFA\u8BAE\u5230\u5B98\u65B9\u95EE\u7B54\u793E\u533A\u63D0\u95EE\u6216\u5BFB\u627E\u5E2E\u52A9\uFF1A".concat(COMMUNITY_SITE_URL),
234
+ ],
235
+ }),
236
+ __metadata("design:type", Function),
237
+ __metadata("design:paramtypes", [Object]),
238
+ __metadata("design:returntype", Promise)
239
+ ], User.prototype, "update", null);
240
+ __decorate([
241
+ catchErrorsDecorator({
242
+ title: '更新密码失败',
243
+ messages: [
244
+ '请确认以下各项:',
245
+ ' 1 - 调用 User.updatePassword() 的语法或参数是否正确',
246
+ ' 3 - 新密码中是否包含非法字符',
247
+ "\u5982\u679C\u95EE\u9898\u4F9D\u7136\u5B58\u5728\uFF0C\u5EFA\u8BAE\u5230\u5B98\u65B9\u95EE\u7B54\u793E\u533A\u63D0\u95EE\u6216\u5BFB\u627E\u5E2E\u52A9\uFF1A".concat(COMMUNITY_SITE_URL),
248
+ ],
249
+ }),
250
+ __metadata("design:type", Function),
251
+ __metadata("design:paramtypes", [String, String]),
252
+ __metadata("design:returntype", void 0)
253
+ ], User.prototype, "updatePassword", null);
254
+ __decorate([
255
+ catchErrorsDecorator({
256
+ title: '更新用户名失败',
257
+ messages: [
258
+ '请确认以下各项:',
259
+ ' 1 - 调用 User.updateUsername() 的语法或参数是否正确',
260
+ ' 2 - 当前环境是否开通了用户名密码登录',
261
+ "\u5982\u679C\u95EE\u9898\u4F9D\u7136\u5B58\u5728\uFF0C\u5EFA\u8BAE\u5230\u5B98\u65B9\u95EE\u7B54\u793E\u533A\u63D0\u95EE\u6216\u5BFB\u627E\u5E2E\u52A9\uFF1A".concat(COMMUNITY_SITE_URL),
262
+ ],
263
+ }),
264
+ __metadata("design:type", Function),
265
+ __metadata("design:paramtypes", [String]),
266
+ __metadata("design:returntype", void 0)
267
+ ], User.prototype, "updateUsername", null);
268
+ __decorate([
269
+ catchErrorsDecorator({
270
+ title: '刷新本地用户信息失败',
271
+ messages: [
272
+ '请确认以下各项:',
273
+ ' 1 - 调用 User.refresh() 的语法或参数是否正确',
274
+ "\u5982\u679C\u95EE\u9898\u4F9D\u7136\u5B58\u5728\uFF0C\u5EFA\u8BAE\u5230\u5B98\u65B9\u95EE\u7B54\u793E\u533A\u63D0\u95EE\u6216\u5BFB\u627E\u5E2E\u52A9\uFF1A".concat(COMMUNITY_SITE_URL),
275
+ ],
276
+ }),
277
+ __metadata("design:type", Function),
278
+ __metadata("design:paramtypes", [Object]),
279
+ __metadata("design:returntype", Promise)
280
+ ], User.prototype, "refresh", null);
281
+ return User;
282
+ }());
283
+ var LoginState = (function () {
284
+ function LoginState(options) {
285
+ var envId = options.envId, cache = options.cache, oauthInstance = options.oauthInstance;
286
+ if (!envId) {
287
+ throwError(ERRORS.INVALID_PARAMS, 'envId is not defined');
288
+ }
289
+ this.cache = cache;
290
+ this.oauthInstance = oauthInstance;
291
+ this.user = new User({
292
+ cache: this.cache,
293
+ oauthInstance: oauthInstance,
294
+ });
295
+ }
296
+ LoginState.prototype.checkLocalState = function () {
297
+ var _a;
298
+ this.oauthLoginState = (_a = this.oauthInstance) === null || _a === void 0 ? void 0 : _a.authApi.hasLoginStateSync();
299
+ this.user.checkLocalInfo();
300
+ };
301
+ LoginState.prototype.checkLocalStateAsync = function () {
302
+ var _a;
303
+ return __awaiter(this, void 0, void 0, function () {
304
+ return __generator(this, function (_b) {
305
+ switch (_b.label) {
306
+ case 0: return [4, ((_a = this.oauthInstance) === null || _a === void 0 ? void 0 : _a.authApi.getLoginState())];
307
+ case 1:
308
+ _b.sent();
309
+ return [4, this.user.checkLocalInfoAsync()];
310
+ case 2:
311
+ _b.sent();
312
+ return [2];
313
+ }
314
+ });
315
+ });
316
+ };
317
+ return LoginState;
318
+ }());
319
+ exports.LoginState = LoginState;
320
+ var Auth = (function () {
321
+ function Auth(config) {
322
+ this.config = config;
323
+ this.cache = config.cache;
324
+ this.oauthInstance = config.oauthInstance;
325
+ }
326
+ Auth.prototype.bindPhoneNumber = function (params) {
327
+ return __awaiter(this, void 0, void 0, function () {
328
+ return __generator(this, function (_a) {
329
+ return [2, this.oauthInstance.authApi.bindPhone(params)];
330
+ });
331
+ });
332
+ };
333
+ Auth.prototype.unbindProvider = function (params) {
334
+ return __awaiter(this, void 0, void 0, function () {
335
+ return __generator(this, function (_a) {
336
+ return [2, this.oauthInstance.authApi.unbindProvider(params)];
337
+ });
338
+ });
339
+ };
340
+ Auth.prototype.bindEmail = function (params) {
341
+ return this.oauthInstance.authApi.bindEmail(params);
342
+ };
343
+ Auth.prototype.verify = function (params) {
344
+ return __awaiter(this, void 0, void 0, function () {
345
+ return __generator(this, function (_a) {
346
+ return [2, this.oauthInstance.authApi.verify(params)];
347
+ });
348
+ });
349
+ };
350
+ Auth.prototype.getVerification = function (params) {
351
+ return __awaiter(this, void 0, void 0, function () {
352
+ return __generator(this, function (_a) {
353
+ return [2, this.oauthInstance.authApi.getVerification(params)];
354
+ });
355
+ });
356
+ };
357
+ Object.defineProperty(Auth.prototype, "currentUser", {
358
+ get: function () {
359
+ if (this.cache.mode === 'async') {
360
+ printWarn(ERRORS.INVALID_OPERATION, 'current platform\'s storage is asynchronous, please use getCurrentUser insteed');
361
+ return;
362
+ }
363
+ var loginState = this.hasLoginState();
364
+ if (loginState) {
365
+ return loginState.user || null;
366
+ }
367
+ return null;
368
+ },
369
+ enumerable: false,
370
+ configurable: true
371
+ });
372
+ Auth.prototype.getCurrentUser = function () {
373
+ return __awaiter(this, void 0, void 0, function () {
374
+ var loginState;
375
+ return __generator(this, function (_a) {
376
+ switch (_a.label) {
377
+ case 0: return [4, this.getLoginState()];
378
+ case 1:
379
+ loginState = _a.sent();
380
+ if (!loginState) return [3, 3];
381
+ return [4, loginState.user.checkLocalInfoAsync()];
382
+ case 2:
383
+ _a.sent();
384
+ return [2, loginState.user || null];
385
+ case 3: return [2, null];
386
+ }
387
+ });
388
+ });
389
+ };
390
+ Auth.prototype.signInAnonymously = function (data) {
391
+ if (data === void 0) { data = {}; }
392
+ return __awaiter(this, void 0, void 0, function () {
393
+ return __generator(this, function (_a) {
394
+ switch (_a.label) {
395
+ case 0: return [4, this.oauthInstance.authApi.signInAnonymously(data)];
396
+ case 1:
397
+ _a.sent();
398
+ return [2, this.createLoginState()];
399
+ }
400
+ });
401
+ });
402
+ };
403
+ Auth.prototype.setCustomSignFunc = function (getTickFn) {
404
+ this.oauthInstance.authApi.setCustomSignFunc(getTickFn);
405
+ };
406
+ Auth.prototype.signInWithCustomTicket = function (params) {
407
+ return __awaiter(this, void 0, void 0, function () {
408
+ return __generator(this, function (_a) {
409
+ switch (_a.label) {
410
+ case 0: return [4, this.oauthInstance.authApi.signInWithCustomTicket(params)];
411
+ case 1:
412
+ _a.sent();
413
+ return [2, this.createLoginState()];
414
+ }
415
+ });
416
+ });
417
+ };
418
+ Auth.prototype.signIn = function (params) {
419
+ return __awaiter(this, void 0, void 0, function () {
420
+ return __generator(this, function (_a) {
421
+ switch (_a.label) {
422
+ case 0: return [4, this.oauthInstance.authApi.signIn(params)];
423
+ case 1:
424
+ _a.sent();
425
+ return [2, this.createLoginState(params)];
426
+ }
427
+ });
428
+ });
429
+ };
430
+ Auth.prototype.signUp = function (params) {
431
+ return __awaiter(this, void 0, void 0, function () {
432
+ return __generator(this, function (_a) {
433
+ switch (_a.label) {
434
+ case 0: return [4, this.oauthInstance.authApi.signUp(params)];
435
+ case 1:
436
+ _a.sent();
437
+ return [2, this.createLoginState()];
438
+ }
439
+ });
440
+ });
441
+ };
442
+ Auth.prototype.setPassword = function (params) {
443
+ return __awaiter(this, void 0, void 0, function () {
444
+ return __generator(this, function (_a) {
445
+ return [2, this.oauthInstance.authApi.setPassword(params)];
446
+ });
447
+ });
448
+ };
449
+ Auth.prototype.isUsernameRegistered = function (username) {
450
+ return __awaiter(this, void 0, void 0, function () {
451
+ var exist;
452
+ return __generator(this, function (_a) {
453
+ switch (_a.label) {
454
+ case 0:
455
+ if (typeof username !== 'string') {
456
+ throwError(ERRORS.INVALID_PARAMS, 'username must be a string');
457
+ }
458
+ return [4, this.oauthInstance.authApi.checkIfUserExist({ username: username })];
459
+ case 1:
460
+ exist = (_a.sent()).exist;
461
+ return [2, exist];
462
+ }
463
+ });
464
+ });
465
+ };
466
+ Auth.prototype.signOut = function () {
467
+ return __awaiter(this, void 0, void 0, function () {
468
+ var userInfoKey;
469
+ return __generator(this, function (_a) {
470
+ switch (_a.label) {
471
+ case 0:
472
+ userInfoKey = this.cache.keys.userInfoKey;
473
+ return [4, this.oauthInstance.authApi.signOut()];
474
+ case 1:
475
+ _a.sent();
476
+ return [4, this.cache.removeStoreAsync(userInfoKey)];
477
+ case 2:
478
+ _a.sent();
479
+ eventBus.fire(EVENTS.LOGIN_STATE_CHANGED);
480
+ return [2];
481
+ }
482
+ });
483
+ });
484
+ };
485
+ Auth.prototype.hasLoginState = function () {
486
+ var _a;
487
+ if (this.cache.mode === 'async') {
488
+ printWarn(ERRORS.INVALID_OPERATION, 'current platform\'s storage is asynchronous, please use getLoginState insteed');
489
+ return;
490
+ }
491
+ var oauthLoginState = (_a = this.oauthInstance) === null || _a === void 0 ? void 0 : _a.authApi.hasLoginStateSync();
492
+ if (oauthLoginState) {
493
+ var loginState = new LoginState({
494
+ envId: this.config.env,
495
+ cache: this.cache,
496
+ oauthInstance: this.oauthInstance,
497
+ });
498
+ return loginState;
499
+ }
500
+ return null;
501
+ };
502
+ Auth.prototype.getLoginState = function () {
503
+ return __awaiter(this, void 0, void 0, function () {
504
+ var oauthLoginState, loginState;
505
+ return __generator(this, function (_a) {
506
+ switch (_a.label) {
507
+ case 0: return [4, this.oauthInstance.authApi.getLoginState()];
508
+ case 1:
509
+ oauthLoginState = _a.sent();
510
+ if (oauthLoginState) {
511
+ loginState = new LoginState({
512
+ envId: this.config.env,
513
+ cache: this.cache,
514
+ oauthInstance: this.oauthInstance,
515
+ });
516
+ return [2, loginState];
517
+ }
518
+ return [2, null];
519
+ }
520
+ });
521
+ });
522
+ };
523
+ Auth.prototype.getUserInfo = function (params) {
524
+ return __awaiter(this, void 0, void 0, function () {
525
+ return __generator(this, function (_a) {
526
+ return [2, this.oauthInstance.authApi.getUserInfo(params)];
527
+ });
528
+ });
529
+ };
530
+ Auth.prototype.getWedaUserInfo = function () {
531
+ return __awaiter(this, void 0, void 0, function () {
532
+ return __generator(this, function (_a) {
533
+ return [2, this.oauthInstance.authApi.getWedaUserInfo()];
534
+ });
535
+ });
536
+ };
537
+ Auth.prototype.getAuthHeader = function () {
538
+ console.error('Auth.getAuthHeader API 已废弃');
539
+ return {};
540
+ };
541
+ Auth.prototype.bindWithProvider = function (params) {
542
+ return __awaiter(this, void 0, void 0, function () {
543
+ return __generator(this, function (_a) {
544
+ return [2, this.oauthInstance.authApi.bindWithProvider(params)];
545
+ });
546
+ });
547
+ };
548
+ Auth.prototype.queryUser = function (queryObj) {
549
+ return __awaiter(this, void 0, void 0, function () {
550
+ return __generator(this, function (_a) {
551
+ return [2, this.oauthInstance.authApi.queryUserProfile(queryObj)];
552
+ });
553
+ });
554
+ };
555
+ Auth.prototype.getAccessToken = function () {
556
+ return __awaiter(this, void 0, void 0, function () {
557
+ var oauthAccessTokenRes;
558
+ return __generator(this, function (_a) {
559
+ switch (_a.label) {
560
+ case 0: return [4, this.oauthInstance.oauth2client.getAccessToken()];
561
+ case 1:
562
+ oauthAccessTokenRes = _a.sent();
563
+ return [2, {
564
+ accessToken: oauthAccessTokenRes,
565
+ env: this.config.env,
566
+ }];
567
+ }
568
+ });
569
+ });
570
+ };
571
+ Auth.prototype.grantProviderToken = function (params) {
572
+ return __awaiter(this, void 0, void 0, function () {
573
+ return __generator(this, function (_a) {
574
+ return [2, this.oauthInstance.authApi.grantProviderToken(params)];
575
+ });
576
+ });
577
+ };
578
+ Auth.prototype.patchProviderToken = function (params) {
579
+ return __awaiter(this, void 0, void 0, function () {
580
+ return __generator(this, function (_a) {
581
+ return [2, this.oauthInstance.authApi.patchProviderToken(params)];
582
+ });
583
+ });
584
+ };
585
+ Auth.prototype.signInWithProvider = function (params) {
586
+ return __awaiter(this, void 0, void 0, function () {
587
+ return __generator(this, function (_a) {
588
+ switch (_a.label) {
589
+ case 0: return [4, this.oauthInstance.authApi.signInWithProvider(params)];
590
+ case 1:
591
+ _a.sent();
592
+ return [2, this.createLoginState(params)];
593
+ }
594
+ });
595
+ });
596
+ };
597
+ Auth.prototype.grantToken = function (params) {
598
+ return __awaiter(this, void 0, void 0, function () {
599
+ return __generator(this, function (_a) {
600
+ switch (_a.label) {
601
+ case 0: return [4, this.oauthInstance.authApi.grantToken(params)];
602
+ case 1:
603
+ _a.sent();
604
+ return [2, this.createLoginState()];
605
+ }
606
+ });
607
+ });
608
+ };
609
+ Auth.prototype.genProviderRedirectUri = function (params) {
610
+ return __awaiter(this, void 0, void 0, function () {
611
+ return __generator(this, function (_a) {
612
+ return [2, this.oauthInstance.authApi.genProviderRedirectUri(params)];
613
+ });
614
+ });
615
+ };
616
+ Auth.prototype.resetPassword = function (params) {
617
+ return __awaiter(this, void 0, void 0, function () {
618
+ return __generator(this, function (_a) {
619
+ return [2, this.oauthInstance.authApi.resetPassword(params)];
620
+ });
621
+ });
622
+ };
623
+ Auth.prototype.deviceAuthorize = function (params) {
624
+ return __awaiter(this, void 0, void 0, function () {
625
+ return __generator(this, function (_a) {
626
+ return [2, this.oauthInstance.authApi.deviceAuthorize(params)];
627
+ });
628
+ });
629
+ };
630
+ Auth.prototype.sudo = function (params) {
631
+ return __awaiter(this, void 0, void 0, function () {
632
+ return __generator(this, function (_a) {
633
+ return [2, this.oauthInstance.authApi.sudo(params)];
634
+ });
635
+ });
636
+ };
637
+ Auth.prototype.deleteMe = function (params) {
638
+ return __awaiter(this, void 0, void 0, function () {
639
+ return __generator(this, function (_a) {
640
+ return [2, this.oauthInstance.authApi.deleteMe(params)];
641
+ });
642
+ });
643
+ };
644
+ Auth.prototype.getProviders = function () {
645
+ return __awaiter(this, void 0, void 0, function () {
646
+ return __generator(this, function (_a) {
647
+ return [2, this.oauthInstance.authApi.getProviders()];
648
+ });
649
+ });
650
+ };
651
+ Auth.prototype.loginScope = function () {
652
+ return __awaiter(this, void 0, void 0, function () {
653
+ return __generator(this, function (_a) {
654
+ return [2, this.oauthInstance.authApi.loginScope()];
655
+ });
656
+ });
657
+ };
658
+ Auth.prototype.loginGroups = function () {
659
+ return __awaiter(this, void 0, void 0, function () {
660
+ return __generator(this, function (_a) {
661
+ return [2, this.oauthInstance.authApi.loginGroups()];
662
+ });
663
+ });
664
+ };
665
+ Auth.prototype.onLoginStateChanged = function (callback) {
666
+ return __awaiter(this, void 0, void 0, function () {
667
+ var loginState;
668
+ var _this = this;
669
+ return __generator(this, function (_a) {
670
+ switch (_a.label) {
671
+ case 0:
672
+ eventBus.on(EVENTS.LOGIN_STATE_CHANGED, function () { return __awaiter(_this, void 0, void 0, function () {
673
+ var loginState;
674
+ return __generator(this, function (_a) {
675
+ switch (_a.label) {
676
+ case 0: return [4, this.getLoginState()];
677
+ case 1:
678
+ loginState = _a.sent();
679
+ callback.call(this, loginState);
680
+ return [2];
681
+ }
682
+ });
683
+ }); });
684
+ return [4, this.getLoginState()];
685
+ case 1:
686
+ loginState = _a.sent();
687
+ callback.call(this, loginState);
688
+ return [2];
689
+ }
690
+ });
691
+ });
692
+ };
693
+ Auth.prototype.refreshTokenForce = function (params) {
694
+ return __awaiter(this, void 0, void 0, function () {
695
+ return __generator(this, function (_a) {
696
+ return [2, this.oauthInstance.authApi.refreshTokenForce(params)];
697
+ });
698
+ });
699
+ };
700
+ Auth.prototype.getCredentials = function () {
701
+ return __awaiter(this, void 0, void 0, function () {
702
+ return __generator(this, function (_a) {
703
+ return [2, this.oauthInstance.authApi.getCredentials()];
704
+ });
705
+ });
706
+ };
707
+ Auth.prototype.getProviderSubType = function () {
708
+ return __awaiter(this, void 0, void 0, function () {
709
+ return __generator(this, function (_a) {
710
+ return [2, this.oauthInstance.authApi.getProviderSubType()];
711
+ });
712
+ });
713
+ };
714
+ Auth.prototype.createLoginState = function (params) {
715
+ return __awaiter(this, void 0, void 0, function () {
716
+ var loginState;
717
+ return __generator(this, function (_a) {
718
+ switch (_a.label) {
719
+ case 0:
720
+ loginState = new LoginState({
721
+ envId: this.config.env,
722
+ cache: this.cache,
723
+ oauthInstance: this.oauthInstance,
724
+ });
725
+ return [4, loginState.checkLocalStateAsync()];
726
+ case 1:
727
+ _a.sent();
728
+ return [4, loginState.user.refresh(params)];
729
+ case 2:
730
+ _a.sent();
731
+ eventBus.fire(EVENTS.LOGIN_STATE_CHANGED);
732
+ return [2, loginState];
733
+ }
734
+ });
735
+ });
736
+ };
737
+ __decorate([
738
+ catchErrorsDecorator({
739
+ title: '绑定手机号失败',
740
+ messages: [
741
+ '请确认以下各项:',
742
+ ' 1 - 调用 auth().bindPhoneNumber() 的语法或参数是否正确',
743
+ ' 2 - 当前环境是否开通了短信验证码登录',
744
+ "\u5982\u679C\u95EE\u9898\u4F9D\u7136\u5B58\u5728\uFF0C\u5EFA\u8BAE\u5230\u5B98\u65B9\u95EE\u7B54\u793E\u533A\u63D0\u95EE\u6216\u5BFB\u627E\u5E2E\u52A9\uFF1A".concat(COMMUNITY_SITE_URL),
745
+ ],
746
+ }),
747
+ __metadata("design:type", Function),
748
+ __metadata("design:paramtypes", [Object]),
749
+ __metadata("design:returntype", Promise)
750
+ ], Auth.prototype, "bindPhoneNumber", null);
751
+ __decorate([
752
+ catchErrorsDecorator({
753
+ title: '解除三方绑定失败',
754
+ messages: [
755
+ '请确认以下各项:',
756
+ ' 1 - 调用 auth().unbindProvider() 的语法或参数是否正确',
757
+ ' 2 - 当前账户是否已经与此登录方式解绑',
758
+ "\u5982\u679C\u95EE\u9898\u4F9D\u7136\u5B58\u5728\uFF0C\u5EFA\u8BAE\u5230\u5B98\u65B9\u95EE\u7B54\u793E\u533A\u63D0\u95EE\u6216\u5BFB\u627E\u5E2E\u52A9\uFF1A".concat(COMMUNITY_SITE_URL),
759
+ ],
760
+ }),
761
+ __metadata("design:type", Function),
762
+ __metadata("design:paramtypes", [Object]),
763
+ __metadata("design:returntype", Promise)
764
+ ], Auth.prototype, "unbindProvider", null);
765
+ __decorate([
766
+ catchErrorsDecorator({
767
+ title: '绑定邮箱地址失败',
768
+ messages: [
769
+ '请确认以下各项:',
770
+ ' 1 - 调用 auth().bindEmail() 的语法或参数是否正确',
771
+ ' 2 - 当前环境是否开通了邮箱密码登录',
772
+ "\u5982\u679C\u95EE\u9898\u4F9D\u7136\u5B58\u5728\uFF0C\u5EFA\u8BAE\u5230\u5B98\u65B9\u95EE\u7B54\u793E\u533A\u63D0\u95EE\u6216\u5BFB\u627E\u5E2E\u52A9\uFF1A".concat(COMMUNITY_SITE_URL),
773
+ ],
774
+ }),
775
+ __metadata("design:type", Function),
776
+ __metadata("design:paramtypes", [Object]),
777
+ __metadata("design:returntype", void 0)
778
+ ], Auth.prototype, "bindEmail", null);
779
+ __decorate([
780
+ catchErrorsDecorator({
781
+ title: '验证码验证失败',
782
+ messages: [
783
+ '请确认以下各项:',
784
+ ' 1 - 调用 auth().verify() 的语法或参数是否正确',
785
+ ' 2 - 当前环境是否开通了手机验证码/邮箱登录',
786
+ "\u5982\u679C\u95EE\u9898\u4F9D\u7136\u5B58\u5728\uFF0C\u5EFA\u8BAE\u5230\u5B98\u65B9\u95EE\u7B54\u793E\u533A\u63D0\u95EE\u6216\u5BFB\u627E\u5E2E\u52A9\uFF1A".concat(COMMUNITY_SITE_URL),
787
+ ],
788
+ }),
789
+ __metadata("design:type", Function),
790
+ __metadata("design:paramtypes", [Object]),
791
+ __metadata("design:returntype", Promise)
792
+ ], Auth.prototype, "verify", null);
793
+ __decorate([
794
+ catchErrorsDecorator({
795
+ title: '获取验证码失败',
796
+ messages: [
797
+ '请确认以下各项:',
798
+ ' 1 - 调用 auth().getVerification() 的语法或参数是否正确',
799
+ ' 2 - 当前环境是否开通了手机验证码/邮箱登录',
800
+ "\u5982\u679C\u95EE\u9898\u4F9D\u7136\u5B58\u5728\uFF0C\u5EFA\u8BAE\u5230\u5B98\u65B9\u95EE\u7B54\u793E\u533A\u63D0\u95EE\u6216\u5BFB\u627E\u5E2E\u52A9\uFF1A".concat(COMMUNITY_SITE_URL),
801
+ ],
802
+ }),
803
+ __metadata("design:type", Function),
804
+ __metadata("design:paramtypes", [Object]),
805
+ __metadata("design:returntype", Promise)
806
+ ], Auth.prototype, "getVerification", null);
807
+ __decorate([
808
+ catchErrorsDecorator({
809
+ title: '获取用户信息失败',
810
+ messages: [
811
+ '请确认以下各项:',
812
+ ' 1 - 调用 auth().getCurrentUser() 的语法或参数是否正确',
813
+ "\u5982\u679C\u95EE\u9898\u4F9D\u7136\u5B58\u5728\uFF0C\u5EFA\u8BAE\u5230\u5B98\u65B9\u95EE\u7B54\u793E\u533A\u63D0\u95EE\u6216\u5BFB\u627E\u5E2E\u52A9\uFF1A".concat(COMMUNITY_SITE_URL),
814
+ ],
815
+ }),
816
+ __metadata("design:type", Function),
817
+ __metadata("design:paramtypes", []),
818
+ __metadata("design:returntype", Promise)
819
+ ], Auth.prototype, "getCurrentUser", null);
820
+ __decorate([
821
+ catchErrorsDecorator({
822
+ title: '匿名登录失败',
823
+ messages: [
824
+ '请确认以下各项:',
825
+ ' 1 - 当前环境是否开启了匿名登录',
826
+ ' 2 - 调用 auth().signInAnonymously() 的语法或参数是否正确',
827
+ "\u5982\u679C\u95EE\u9898\u4F9D\u7136\u5B58\u5728\uFF0C\u5EFA\u8BAE\u5230\u5B98\u65B9\u95EE\u7B54\u793E\u533A\u63D0\u95EE\u6216\u5BFB\u627E\u5E2E\u52A9\uFF1A".concat(COMMUNITY_SITE_URL),
828
+ ],
829
+ }),
830
+ __metadata("design:type", Function),
831
+ __metadata("design:paramtypes", [Object]),
832
+ __metadata("design:returntype", Promise)
833
+ ], Auth.prototype, "signInAnonymously", null);
834
+ __decorate([
835
+ catchErrorsDecorator({
836
+ title: '自定义登录失败',
837
+ messages: [
838
+ '请确认以下各项:',
839
+ ' 1 - 当前环境是否开启了自定义登录',
840
+ ' 2 - 调用 auth().signInWithCustomTicket() 的语法或参数是否正确',
841
+ ' 3 - ticket 是否归属于当前环境',
842
+ ' 4 - 创建 ticket 的自定义登录私钥是否过期',
843
+ "\u5982\u679C\u95EE\u9898\u4F9D\u7136\u5B58\u5728\uFF0C\u5EFA\u8BAE\u5230\u5B98\u65B9\u95EE\u7B54\u793E\u533A\u63D0\u95EE\u6216\u5BFB\u627E\u5E2E\u52A9\uFF1A".concat(COMMUNITY_SITE_URL),
844
+ ],
845
+ }),
846
+ __metadata("design:type", Function),
847
+ __metadata("design:paramtypes", [Object]),
848
+ __metadata("design:returntype", Promise)
849
+ ], Auth.prototype, "signInWithCustomTicket", null);
850
+ __decorate([
851
+ catchErrorsDecorator({
852
+ title: '注册失败',
853
+ messages: [
854
+ '请确认以下各项:',
855
+ ' 1 - 当前环境是否开启了指定登录方式',
856
+ ' 2 - 调用 auth().signUp() 的语法或参数是否正确',
857
+ "\u5982\u679C\u95EE\u9898\u4F9D\u7136\u5B58\u5728\uFF0C\u5EFA\u8BAE\u5230\u5B98\u65B9\u95EE\u7B54\u793E\u533A\u63D0\u95EE\u6216\u5BFB\u627E\u5E2E\u52A9\uFF1A".concat(COMMUNITY_SITE_URL),
858
+ ],
859
+ }),
860
+ __metadata("design:type", Function),
861
+ __metadata("design:paramtypes", [Object]),
862
+ __metadata("design:returntype", Promise)
863
+ ], Auth.prototype, "signUp", null);
864
+ __decorate([
865
+ catchErrorsDecorator({
866
+ title: '获取用户是否被占用失败',
867
+ messages: [
868
+ '请确认以下各项:',
869
+ ' 1 - 调用 auth().isUsernameRegistered() 的语法或参数是否正确',
870
+ "\u5982\u679C\u95EE\u9898\u4F9D\u7136\u5B58\u5728\uFF0C\u5EFA\u8BAE\u5230\u5B98\u65B9\u95EE\u7B54\u793E\u533A\u63D0\u95EE\u6216\u5BFB\u627E\u5E2E\u52A9\uFF1A".concat(COMMUNITY_SITE_URL),
871
+ ],
872
+ }),
873
+ __metadata("design:type", Function),
874
+ __metadata("design:paramtypes", [String]),
875
+ __metadata("design:returntype", Promise)
876
+ ], Auth.prototype, "isUsernameRegistered", null);
877
+ __decorate([
878
+ catchErrorsDecorator({
879
+ title: '用户登出失败',
880
+ messages: [
881
+ '请确认以下各项:',
882
+ ' 1 - 调用 auth().signOut() 的语法或参数是否正确',
883
+ ' 2 - 当前用户是否为匿名登录(匿名登录不支持signOut)',
884
+ "\u5982\u679C\u95EE\u9898\u4F9D\u7136\u5B58\u5728\uFF0C\u5EFA\u8BAE\u5230\u5B98\u65B9\u95EE\u7B54\u793E\u533A\u63D0\u95EE\u6216\u5BFB\u627E\u5E2E\u52A9\uFF1A".concat(COMMUNITY_SITE_URL),
885
+ ],
886
+ }),
887
+ __metadata("design:type", Function),
888
+ __metadata("design:paramtypes", []),
889
+ __metadata("design:returntype", Promise)
890
+ ], Auth.prototype, "signOut", null);
891
+ __decorate([
892
+ catchErrorsDecorator({
893
+ title: '获取本地登录态失败',
894
+ messages: [
895
+ '请确认以下各项:',
896
+ ' 1 - 调用 auth().getLoginState() 的语法或参数是否正确',
897
+ "\u5982\u679C\u95EE\u9898\u4F9D\u7136\u5B58\u5728\uFF0C\u5EFA\u8BAE\u5230\u5B98\u65B9\u95EE\u7B54\u793E\u533A\u63D0\u95EE\u6216\u5BFB\u627E\u5E2E\u52A9\uFF1A".concat(COMMUNITY_SITE_URL),
898
+ ],
899
+ }),
900
+ __metadata("design:type", Function),
901
+ __metadata("design:paramtypes", []),
902
+ __metadata("design:returntype", Promise)
903
+ ], Auth.prototype, "getLoginState", null);
904
+ __decorate([
905
+ catchErrorsDecorator({
906
+ title: '获取用户信息失败',
907
+ messages: [
908
+ '请确认以下各项:',
909
+ ' 1 - 是否已登录',
910
+ ' 2 - 调用 auth().getUserInfo() 的语法或参数是否正确',
911
+ "\u5982\u679C\u95EE\u9898\u4F9D\u7136\u5B58\u5728\uFF0C\u5EFA\u8BAE\u5230\u5B98\u65B9\u95EE\u7B54\u793E\u533A\u63D0\u95EE\u6216\u5BFB\u627E\u5E2E\u52A9\uFF1A".concat(COMMUNITY_SITE_URL),
912
+ ],
913
+ }),
914
+ __metadata("design:type", Function),
915
+ __metadata("design:paramtypes", [Object]),
916
+ __metadata("design:returntype", Promise)
917
+ ], Auth.prototype, "getUserInfo", null);
918
+ __decorate([
919
+ catchErrorsDecorator({
920
+ title: '获取微搭插件用户信息失败',
921
+ messages: [
922
+ '请确认以下各项:',
923
+ ' 1 - 是否已登录',
924
+ ' 2 - 调用 auth().getWedaUserInfo() 的语法或参数是否正确',
925
+ "\u5982\u679C\u95EE\u9898\u4F9D\u7136\u5B58\u5728\uFF0C\u5EFA\u8BAE\u5230\u5B98\u65B9\u95EE\u7B54\u793E\u533A\u63D0\u95EE\u6216\u5BFB\u627E\u5E2E\u52A9\uFF1A".concat(COMMUNITY_SITE_URL),
926
+ ],
927
+ }),
928
+ __metadata("design:type", Function),
929
+ __metadata("design:paramtypes", []),
930
+ __metadata("design:returntype", Promise)
931
+ ], Auth.prototype, "getWedaUserInfo", null);
932
+ __decorate([
933
+ catchErrorsDecorator({
934
+ title: '绑定第三方登录方式失败',
935
+ messages: [
936
+ '请确认以下各项:',
937
+ ' 1 - 调用 auth().bindWithProvider() 的语法或参数是否正确',
938
+ ' 2 - 此账户是否已经绑定此第三方',
939
+ "\u5982\u679C\u95EE\u9898\u4F9D\u7136\u5B58\u5728\uFF0C\u5EFA\u8BAE\u5230\u5B98\u65B9\u95EE\u7B54\u793E\u533A\u63D0\u95EE\u6216\u5BFB\u627E\u5E2E\u52A9\uFF1A".concat(COMMUNITY_SITE_URL),
940
+ ],
941
+ }),
942
+ __metadata("design:type", Function),
943
+ __metadata("design:paramtypes", [Object]),
944
+ __metadata("design:returntype", Promise)
945
+ ], Auth.prototype, "bindWithProvider", null);
946
+ __decorate([
947
+ catchErrorsDecorator({
948
+ title: '获取身份源类型',
949
+ messages: [
950
+ '请确认以下各项:',
951
+ ' 1 - 调用 auth().getProviderSubType() 的语法或参数是否正确',
952
+ "\u5982\u679C\u95EE\u9898\u4F9D\u7136\u5B58\u5728\uFF0C\u5EFA\u8BAE\u5230\u5B98\u65B9\u95EE\u7B54\u793E\u533A\u63D0\u95EE\u6216\u5BFB\u627E\u5E2E\u52A9\uFF1A".concat(COMMUNITY_SITE_URL),
953
+ ],
954
+ }),
955
+ __metadata("design:type", Function),
956
+ __metadata("design:paramtypes", []),
957
+ __metadata("design:returntype", Promise)
958
+ ], Auth.prototype, "getProviderSubType", null);
959
+ return Auth;
960
+ }());
961
+ exports.Auth = Auth;
962
+ var component = {
963
+ name: COMPONENT_NAME,
964
+ namespace: 'auth',
965
+ entity: function (config) {
966
+ if (config === void 0) { config = { region: '', persistence: 'local' }; }
967
+ if (this.authInstance) {
968
+ printWarn(ERRORS.INVALID_OPERATION, 'every cloudbase instance should has only one auth object');
969
+ return this.authInstance;
970
+ }
971
+ var _a = this.platform, adapter = _a.adapter, runtime = _a.runtime;
972
+ var newPersistence = config.persistence || adapter.primaryStorage;
973
+ if (newPersistence && (newPersistence !== this.config.persistence)) {
974
+ this.updateConfig({ persistence: newPersistence });
975
+ }
976
+ var _b = this.config, env = _b.env, persistence = _b.persistence, debug = _b.debug, clientId = _b.clientId, storage = _b.storage;
977
+ var oauthInstance = new oauth_1.CloudbaseOAuth({
978
+ clientId: clientId,
979
+ apiOrigin: this.request.getBaseEndPoint(),
980
+ storage: (config === null || config === void 0 ? void 0 : config.storage) || storage,
981
+ request: config === null || config === void 0 ? void 0 : config.request,
982
+ anonymousSignInFunc: config === null || config === void 0 ? void 0 : config.anonymousSignInFunc,
983
+ });
984
+ this.oauthInstance = oauthInstance;
985
+ this.authInstance = new Auth({
986
+ env: env,
987
+ region: config.region,
988
+ persistence: persistence,
989
+ debug: debug,
990
+ cache: this.cache,
991
+ runtime: runtime,
992
+ _fromApp: this,
993
+ oauthInstance: oauthInstance,
994
+ });
995
+ return this.authInstance;
996
+ },
997
+ };
998
+ try {
999
+ cloudbase.registerComponent(component);
1000
+ }
1001
+ catch (e) { }
1002
+ function registerAuth(app) {
1003
+ try {
1004
+ app.registerComponent(component);
1005
+ }
1006
+ catch (e) {
1007
+ console.warn(e);
1008
+ }
1009
+ }
1010
+ exports.registerAuth = registerAuth;
1011
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxrREFBd0U7QUFNeEUsMENBQXVGO0FBSy9FLElBQUEsU0FBUyxHQUFpQixpQkFBSyxVQUF0QixFQUFFLFVBQVUsR0FBSyxpQkFBSyxXQUFWLENBQVU7QUFDL0IsSUFBQSxNQUFNLEdBQXlCLHFCQUFTLE9BQWxDLEVBQUUsa0JBQWtCLEdBQUsscUJBQVMsbUJBQWQsQ0FBYztBQUN4QyxJQUFBLG9CQUFvQixHQUFLLG1CQUFPLHFCQUFaLENBQVk7QUFDaEMsSUFBQSxxQkFBcUIsR0FBSyxrQkFBTSxzQkFBWCxDQUFXO0FBRXhDLElBQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQTtBQUU3QixJQUFNLE1BQU0sR0FBRztJQUViLG1CQUFtQixFQUFFLG1CQUFtQjtDQUN6QyxDQUFBO0FBa0JELElBQU0sUUFBUSxHQUFHLElBQUkscUJBQXFCLEVBQUUsQ0FBQTtBQU81QztJQXVCRSxjQUFZLE9BQXFCO1FBQ3ZCLElBQUEsS0FBSyxHQUFvQixPQUFPLE1BQTNCLEVBQUUsYUFBYSxHQUFLLE9BQU8sY0FBWixDQUFZO1FBQ3hDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBRWxDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUNwQixDQUFDO0lBSVksNkJBQWMsR0FBM0I7OztnQkFDRSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQVcsQ0FBQTtnQkFDakQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFXLENBQUE7Z0JBQ3ZELElBQUksQ0FBQyxPQUFPLEdB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QUMsU0FBUyxDQUFDLENBQUE7S0FDakM7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7S0FDaEI7QUFDSCxDQUFDO0FBTkQsb0NBTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQ2xvdWRiYXNlIH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcydcbmltcG9ydCB7IHV0aWxzLCBjb25zdGFudHMsIGhlbHBlcnMsIGV2ZW50cyB9IGZyb20gJ0BjbG91ZGJhc2UvdXRpbGl0aWVzJ1xuaW1wb3J0IHsgSUNsb3VkYmFzZUNhY2hlIH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9jYWNoZSdcbmltcG9ydCB7IElDbG91ZGJhc2VSZXF1ZXN0IH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9yZXF1ZXN0J1xuaW1wb3J0IHsgSUNsb3VkYmFzZUF1dGhDb25maWcsIElVc2VyLCBJVXNlckluZm8sIElMb2dpblN0YXRlIH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9hdXRoJ1xuaW1wb3J0IHsgSUNsb3VkYmFzZUNvbXBvbmVudCB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMvY29tcG9uZW50J1xuXG5pbXBvcnQgeyBhdXRoTW9kZWxzLCBDbG91ZGJhc2VPQXV0aCwgQXV0aE9wdGlvbnMsIENyZWRlbnRpYWxzIH0gZnJvbSAnQGNsb3VkYmFzZS9vYXV0aCdcbmltcG9ydCB7IFByb3ZpZGVyU3ViVHlwZSB9IGZyb20gJ0BjbG91ZGJhc2Uvb2F1dGgvZGlzdC9janMvYXV0aC9tb2RlbHMnXG5cbmRlY2xhcmUgY29uc3QgY2xvdWRiYXNlOiBJQ2xvdWRiYXNlXG5cbmNvbnN0IHsgcHJpbnRXYXJuLCB0aHJvd0Vycm9yIH0gPSB1dGlsc1xuY29uc3QgeyBFUlJPUlMsIENPTU1VTklUWV9TSVRFX1VSTCB9ID0gY29uc3RhbnRzXG5jb25zdCB7IGNhdGNoRXJyb3JzRGVjb3JhdG9yIH0gPSBoZWxwZXJzXG5jb25zdCB7IENsb3VkYmFzZUV2ZW50RW1pdHRlciB9ID0gZXZlbnRzXG5cbmNvbnN0IENPTVBPTkVOVF9OQU1FID0gJ2F1dGgnXG5cbmNvbnN0IEVWRU5UUyA9IHtcbiAgLy8g55m75b2V5oCB5pS55Y+Y5ZCO6Kem5Y+RXG4gIExPR0lOX1NUQVRFX0NIQU5HRUQ6ICdsb2dpblN0YXRlQ2hhbmdlZCcsXG59XG5cbmludGVyZmFjZSBVc2VySW5mbyB7XG4gIHVpZD86IHN0cmluZ1xuICBnZW5kZXI/OiBzdHJpbmdcbiAgcGljdHVyZT86IHN0cmluZ1xuICBlbWFpbD86IHN0cmluZ1xuICBlbWFpbF92ZXJpZmllZD86IGJvb2xlYW5cbiAgcGhvbmVfbnVtYmVyPzogc3RyaW5nXG4gIHVzZXJuYW1lPzogc3RyaW5nXG4gIG5hbWU/OiBzdHJpbmdcbiAgYmlydGhkYXRlPzogc3RyaW5nXG4gIHpvbmVpbmZvPzogc3RyaW5nXG4gIGxvY2FsZT86IHN0cmluZ1xuICBzdWI/OiBzdHJpbmdcbiAgY3JlYXRlZF9mcm9tPzogc3RyaW5nXG59XG5cbmNvbnN0IGV2ZW50QnVzID0gbmV3IENsb3VkYmFzZUV2ZW50RW1pdHRlcigpXG5cbmludGVyZmFjZSBJVXNlck9wdGlvbnMge1xuICBjYWNoZTogSUNsb3VkYmFzZUNhY2hlXG4gIG9hdXRoSW5zdGFuY2U6IENsb3VkYmFzZU9BdXRoXG59XG5cbmNsYXNzIFVzZXIgaW1wbGVtZW50cyBJVXNlciB7XG4gIHB1YmxpYyB1aWQ/OiBzdHJpbmdcbiAgcHVibGljIGdlbmRlcj86IHN0cmluZ1xuICBwdWJsaWMgcGljdHVyZT86IHN0cmluZ1xuICBwdWJsaWMgZW1haWw/OiBzdHJpbmdcbiAgcHVibGljIGVtYWlsVmVyaWZpZWQ/OiBib29sZWFuXG4gIHB1YmxpYyBwaG9uZU51bWJlcj86IHN0cmluZ1xuICBwdWJsaWMgdXNlcm5hbWU/OiBzdHJpbmdcbiAgcHVibGljIG5hbWU/OiBzdHJpbmdcbiAgcHVibGljIHByb3ZpZGVycz86IHtcbiAgICBpZD86IHN0cmluZ1xuICAgIHByb3ZpZGVyVXNlcklkPzogc3RyaW5nXG4gICAgbmFtZT86IHN0cmluZ1xuICB9W11cbiAgcHVibGljIGJpcnRoZGF0ZT86IHN0cmluZ1xuICBwdWJsaWMgem9uZWluZm8/OiBzdHJpbmdcbiAgcHVibGljIGxvY2FsZT86IHN0cmluZ1xuICBwdWJsaWMgc3ViPzogc3RyaW5nXG4gIHB1YmxpYyBjcmVhdGVkRnJvbT86IHN0cmluZ1xuXG4gIHByaXZhdGUgY2FjaGU6IElDbG91ZGJhc2VDYWNoZVxuICBwcml2YXRlIG9hdXRoSW5zdGFuY2U6IENsb3VkYmFzZU9BdXRoIC8vIENsb3VkYmFzZU9BdXRoIOexu+Wei1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IElVc2VyT3B0aW9ucykge1xuICAgIGNvbnN0IHsgY2FjaGUsIG9hdXRoSW5zdGFuY2UgfSA9IG9wdGlvbnNcbiAgICB0aGlzLmNhY2hlID0gY2FjaGVcbiAgICB0aGlzLm9hdXRoSW5zdGFuY2UgPSBvYXV0aEluc3RhbmNlXG5cbiAgICB0aGlzLnNldFVzZXJJbmZvKClcbiAgfVxuICAvKipcbiAgICog6I635Y+W5pys5Zyw55So5oi35L+h5oGvLeWQjOatpVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNoZWNrTG9jYWxJbmZvKCkge1xuICAgIHRoaXMudWlkID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCd1aWQnKSBhcyBzdHJpbmdcbiAgICB0aGlzLmdlbmRlciA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnZ2VuZGVyJykgYXMgc3RyaW5nXG4gICAgdGhpcy5waWN0dXJlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwaWN0dXJlJykgYXMgc3RyaW5nXG4gICAgdGhpcy5lbWFpbCA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnZW1haWwnKSBhcyBzdHJpbmdcbiAgICB0aGlzLmVtYWlsVmVyaWZpZWQgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2VtYWlsX3ZlcmlmaWVkJykgYXMgYm9vbGVhblxuICAgIHRoaXMucGhvbmVOdW1iZXIgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3Bob25lX251bWJlcicpIGFzIHN0cmluZ1xuICAgIHRoaXMudXNlcm5hbWUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3VzZXJuYW1lJykgYXMgc3RyaW5nXG4gICAgdGhpcy5uYW1lID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCduYW1lJykgYXMgc3RyaW5nXG4gICAgdGhpcy5iaXJ0aGRhdGUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2JpcnRoZGF0ZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuem9uZWluZm8gPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3pvbmVpbmZvJykgYXMgc3RyaW5nXG4gICAgdGhpcy5sb2NhbGUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2xvY2FsZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuc3ViID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdzdWInKSBhcyBzdHJpbmdcbiAgICB0aGlzLmNyZWF0ZWRGcm9tID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdjcmVhdGVkX2Zyb20nKSBhcyBzdHJpbmdcbiAgICB0aGlzLnByb3ZpZGVycyA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygncHJvdmlkZXJzJykgYXMgYW55XG4gIH1cbiAgLyoqXG4gICAqIOiOt+WPluacrOWcsOeUqOaIt+S/oeaBry3lvILmraVcbiAgICovXG4gIHB1YmxpYyBhc3luYyBjaGVja0xvY2FsSW5mb0FzeW5jKCkge1xuICAgIHRoaXMudWlkID0gYXdhaXQgdGhpcy5nZXRMb2NhbFVzZXJJbmZvQXN5bmMoJ3VpZCcpXG4gICAgdGhpcy5nZW5kZXIgPSBhd2FpdCB0aGlzLmdldExvY2FsVXNlckluZm9Bc3luYygnZ2VuZGVyJylcbiAgICB0aGlzLnBpY3R1cmUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3BpY3R1cmUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLmVtYWlsID0gYXdhaXQgdGhpcy5nZXRMb2NhbFVzZXJJbmZvQXN5bmMoJ2VtYWlsJylcbiAgICB0aGlzLmVtYWlsVmVyaWZpZWQgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2VtYWlsX3ZlcmlmaWVkJykgYXMgYm9vbGVhblxuICAgIHRoaXMucGhvbmVOdW1iZXIgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3Bob25lX251bWJlcicpIGFzIHN0cmluZ1xuICAgIHRoaXMudXNlcm5hbWUgPSBhd2FpdCB0aGlzLmdldExvY2FsVXNlckluZm9Bc3luYygndXNlcm5hbWUnKVxuICAgIHRoaXMubmFtZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnbmFtZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuYmlydGhkYXRlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdiaXJ0aGRhdGUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLnpvbmVpbmZvID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCd6b25laW5mbycpIGFzIHN0cmluZ1xuICAgIHRoaXMubG9jYWxlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdsb2NhbGUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLnN1YiA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnc3ViJykgYXMgc3RyaW5nXG4gICAgdGhpcy5jcmVhdGVkRnJvbSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnY3JlYXRlZF9mcm9tJykgYXMgc3RyaW5nXG4gICAgdGhpcy5wcm92aWRlcnMgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3Byb3ZpZGVycycpIGFzIGFueVxuICB9XG5cblxuICAvKipcbiAgICog5pu05paw55So5oi35L+h5oGvXG4gICAqIEBwYXJhbSB1c2VySW5mb1xuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+abtOaWsOeUqOaIt+S/oeaBr+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBVc2VyLnVwZGF0ZSgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g55So5oi35L+h5oGv5Lit5piv5ZCm5YyF5ZCr6Z2e5rOV5YC8JyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyB1cGRhdGUodXNlckluZm86IGF1dGhNb2RlbHMuVXNlclByb2ZpbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBjb25zdCB7IG5hbWUsIGdlbmRlciwgYXZhdGFyVXJsLCBwcm92aW5jZSwgY291bnRyeSwgY2l0eSB9ID0gdXNlckluZm9cbiAgICBjb25zdCBuZXdVc2VySW5mbyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNldFVzZXJQcm9maWxlKHsgLi4udXNlckluZm8gfSlcblxuICAgIHRoaXMuc2V0TG9jYWxVc2VySW5mbyhuZXdVc2VySW5mbylcbiAgfVxuICAvKipcbiAgICog5pu05paw5a+G56CBXG4gICAqIEBwYXJhbSBuZXdQYXNzd29yZFxuICAgKiBAcGFyYW0gb2xkUGFzc3dvcmRcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfmm7TmlrDlr4bnoIHlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggVXNlci51cGRhdGVQYXNzd29yZCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAzIC0g5paw5a+G56CB5Lit5piv5ZCm5YyF5ZCr6Z2e5rOV5a2X56ymJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyB1cGRhdGVQYXNzd29yZChuZXdQYXNzd29yZDogc3RyaW5nLCBvbGRQYXNzd29yZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnVwZGF0ZVBhc3N3b3JkQnlPbGQoe1xuICAgICAgb2xkX3Bhc3N3b3JkOiBvbGRQYXNzd29yZCxcbiAgICAgIG5ld19wYXNzd29yZDogbmV3UGFzc3dvcmQsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiDmm7TmlrDnlKjmiLflkI1cbiAgICogQHBhcmFtIHVzZXJuYW1lXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn5pu05paw55So5oi35ZCN5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIFVzZXIudXBkYXRlVXNlcm5hbWUoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOmAmuS6hueUqOaIt+WQjeWvhueggeeZu+W9lScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgdXBkYXRlVXNlcm5hbWUodXNlcm5hbWU6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgdXNlcm5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvd0Vycm9yKEVSUk9SUy5JTlZBTElEX1BBUkFNUywgJ3VzZXJuYW1lIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnVwZGF0ZSh7XG4gICAgICB1c2VybmFtZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIOWIt+aWsOacrOWcsOeUqOaIt+S/oeaBr+OAguW9k+eUqOaIt+WcqOWFtuS7luWuouaIt+err+abtOaWsOeUqOaIt+S/oeaBr+S5i+WQju+8jOWPr+S7peiwg+eUqOatpOaOpeWPo+WQjOatpeabtOaWsOS5i+WQjueahOS/oeaBr+OAglxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+WIt+aWsOacrOWcsOeUqOaIt+S/oeaBr+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBVc2VyLnJlZnJlc2goKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHJlZnJlc2gocGFyYW1zPzogeyB2ZXJzaW9uPzogc3RyaW5nOyBxdWVyeT86IGFueSB9KTogUHJvbWlzZTxJVXNlckluZm8+IHtcbiAgICBjb25zdCBuZXdVc2VySW5mbyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldFVzZXJJbmZvKHBhcmFtcylcbiAgICB0aGlzLnNldExvY2FsVXNlckluZm8obmV3VXNlckluZm8pXG4gICAgcmV0dXJuIG5ld1VzZXJJbmZvXG4gIH1cblxuICBwcml2YXRlIGdldExvY2FsVXNlckluZm8oa2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBib29sZWFuIHtcbiAgICBjb25zdCB7IHVzZXJJbmZvS2V5IH0gPSB0aGlzLmNhY2hlLmtleXNcbiAgICBjb25zdCB1c2VySW5mbyA9IHRoaXMuY2FjaGUuZ2V0U3RvcmUodXNlckluZm9LZXkpXG4gICAgcmV0dXJuIHVzZXJJbmZvW2tleV1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0TG9jYWxVc2VySW5mb0FzeW5jKGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7IHVzZXJJbmZvS2V5IH0gPSB0aGlzLmNhY2hlLmtleXNcbiAgICBjb25zdCB1c2VySW5mbyA9IGF3YWl0IHRoaXMuY2FjaGUuZ2V0U3RvcmVBc3luYyh1c2VySW5mb0tleSlcbiAgICByZXR1cm4gdXNlckluZm9ba2V5XVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRVc2VySW5mbygpIHtcbiAgICBjb25zdCB7IHVzZXJJbmZvS2V5IH0gPSB0aGlzLmNhY2hlLmtleXNcbiAgICBjb25zdCB1c2VySW5mbyA9IHRoaXMuY2FjaGUuZ2V0U3RvcmUodXNlckluZm9LZXkpXG4gICAgO1tcbiAgICAgICd1aWQnLFxuICAgICAgJ2VtYWlsJyxcbiAgICAgICduYW1lJyxcbiAgICAgICdnZW5kZXInLFxuICAgICAgJ3BpY3R1cmUnLFxuICAgICAgJ2VtYWlsX3ZlcmlmaWVkJyxcbiAgICAgICdwaG9uZV9udW1iZXInLFxuICAgICAgJ2JpcnRoZGF0ZScsXG4gICAgICAnem9uZWluZm8nLFxuICAgICAgJ2xvY2FsZScsXG4gICAgICAnc3ViJyxcbiAgICAgICdjcmVhdGVkX2Zyb20nLFxuICAgICAgJ3Byb3ZpZGVycycsXG4gICAgICAndXNlcm5hbWUnLFxuICAgIF0uZm9yRWFjaCgoaW5mb0tleSkgPT4ge1xuICAgICAgdGhpc1tpbmZvS2V5XSA9IHVzZXJJbmZvW2luZm9LZXldXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgc2V0TG9jYWxVc2VySW5mbyh1c2VySW5mbzogYW55KSB7XG4gICAgY29uc3QgeyB1c2VySW5mb0tleSB9ID0gdGhpcy5jYWNoZS5rZXlzXG4gICAgdGhpcy5jYWNoZS5zZXRTdG9yZSh1c2VySW5mb0tleSwgdXNlckluZm8pXG4gICAgdGhpcy5zZXRVc2VySW5mbygpXG4gIH1cbn1cbmludGVyZmFjZSBJTG9naW5TdGF0ZU9wdGlvbnMgZXh0ZW5kcyBJVXNlck9wdGlvbnMge1xuICBlbnZJZDogc3RyaW5nXG59XG5leHBvcnQgY2xhc3MgTG9naW5TdGF0ZSBpbXBsZW1lbnRzIElMb2dpblN0YXRlIHtcbiAgcHVibGljIHVzZXI6IElVc2VyXG4gIHB1YmxpYyBvYXV0aExvZ2luU3RhdGU6IGFueVxuXG4gIHByaXZhdGUgb2F1dGhJbnN0YW5jZTogQ2xvdWRiYXNlT0F1dGhcbiAgcHJpdmF0ZSBjYWNoZTogSUNsb3VkYmFzZUNhY2hlXG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogSUxvZ2luU3RhdGVPcHRpb25zKSB7XG4gICAgY29uc3QgeyBlbnZJZCwgY2FjaGUsIG9hdXRoSW5zdGFuY2UgfSA9IG9wdGlvbnNcbiAgICBpZiAoIWVudklkKSB7XG4gICAgICB0aHJvd0Vycm9yKEVSUk9SUy5JTlZBTElEX1BBUkFNUywgJ2VudklkIGlzIG5vdCBkZWZpbmVkJylcbiAgICB9XG4gICAgdGhpcy5jYWNoZSA9IGNhY2hlXG4gICAgdGhpcy5vYXV0aEluc3RhbmNlID0gb2F1dGhJbnN0YW5jZVxuXG4gICAgdGhpcy51c2VyID0gbmV3IFVzZXIoe1xuICAgICAgY2FjaGU6IHRoaXMuY2FjaGUsXG4gICAgICBvYXV0aEluc3RhbmNlLFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgY2hlY2tMb2NhbFN0YXRlKCkge1xuICAgIHRoaXMub2F1dGhMb2dpblN0YXRlID0gdGhpcy5vYXV0aEluc3RhbmNlPy5hdXRoQXBpLmhhc0xvZ2luU3RhdGVTeW5jKClcbiAgICB0aGlzLnVzZXIuY2hlY2tMb2NhbEluZm8oKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNoZWNrTG9jYWxTdGF0ZUFzeW5jKCkge1xuICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZT8uYXV0aEFwaS5nZXRMb2dpblN0YXRlKClcbiAgICBhd2FpdCB0aGlzLnVzZXIuY2hlY2tMb2NhbEluZm9Bc3luYygpXG4gIH1cbn1cblxuY2xhc3MgQXV0aCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBJQ2xvdWRiYXNlQXV0aENvbmZpZ1xuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlOiBJQ2xvdWRiYXNlQ2FjaGVcblxuICBwcml2YXRlIG9hdXRoSW5zdGFuY2U6IENsb3VkYmFzZU9BdXRoXG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBJQ2xvdWRiYXNlQXV0aENvbmZpZ1xuICAmIHsgY2FjaGU6IElDbG91ZGJhc2VDYWNoZSwgcmVxdWVzdD86IElDbG91ZGJhc2VSZXF1ZXN0LCBydW50aW1lPzogc3RyaW5nIH0pIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZ1xuICAgIHRoaXMuY2FjaGUgPSBjb25maWcuY2FjaGVcbiAgICB0aGlzLm9hdXRoSW5zdGFuY2UgPSBjb25maWcub2F1dGhJbnN0YW5jZVxuICB9XG5cbiAgLyoqXG4gICog57uR5a6a5omL5py65Y+3XG4gICogQHBhcmFtIHBob25lTnVtYmVyXG4gICogQHBhcmFtIHBob25lQ29kZVxuICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn57uR5a6a5omL5py65Y+35aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5iaW5kUGhvbmVOdW1iZXIoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOmAmuS6huefreS/oemqjOivgeeggeeZu+W9lScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgYmluZFBob25lTnVtYmVyKHBhcmFtczogYXV0aE1vZGVscy5CaW5kUGhvbmVSZXF1ZXN0KSB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmJpbmRQaG9uZShwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICog6Kej57uR5LiJ5pa557uR5a6aXG4gICAqIEBwYXJhbSBsb2dpblR5cGVcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfop6PpmaTkuInmlrnnu5HlrprlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLnVuYmluZFByb3ZpZGVyKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDlvZPliY3otKbmiLfmmK/lkKblt7Lnu4/kuI7mraTnmbvlvZXmlrnlvI/op6Pnu5EnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHVuYmluZFByb3ZpZGVyKHBhcmFtczogYXV0aE1vZGVscy5VbmJpbmRQcm92aWRlclJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudW5iaW5kUHJvdmlkZXIocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gKiDmm7TmlrDpgq7nrrHlnLDlnYBcbiAqIEBwYXJhbSBlbWFpbFxuICogQHBhcmFtIHN1ZG9fdG9rZW5cbiAqIEBwYXJhbSB2ZXJpZmljYXRpb25fdG9rZW5cbiAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn57uR5a6a6YKu566x5Zyw5Z2A5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5iaW5kRW1haWwoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOmAmuS6humCrueuseWvhueggeeZu+W9lScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYmluZEVtYWlsKHBhcmFtczogYXV0aE1vZGVscy5CaW5kRW1haWxSZXF1ZXN0KSB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmJpbmRFbWFpbChwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICogdmVyaWZ5XG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5WZXJpZnlSZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8YXV0aE1vZGVscy5WZXJpZnlSZXNwb25zZT59XG4gICAqIEBtZW1iZXJvZiBVc2VyXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6aqM6K+B56CB6aqM6K+B5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS52ZXJpZnkoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOmAmuS6huaJi+acuumqjOivgeeggS/pgq7nrrHnmbvlvZUnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHZlcmlmeShwYXJhbXM6IGF1dGhNb2RlbHMuVmVyaWZ5UmVxdWVzdCk6IFByb21pc2U8YXV0aE1vZGVscy5WZXJpZnlSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS52ZXJpZnkocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPlumqjOivgeeggVxuICAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuR2V0VmVyaWZpY2F0aW9uUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGF1dGhNb2RlbHMuR2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+fVxuICAgKiBAbWVtYmVyb2YgVXNlclxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPlumqjOivgeeggeWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuZ2V0VmVyaWZpY2F0aW9uKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDlvZPliY3njq/looPmmK/lkKblvIDpgJrkuobmiYvmnLrpqozor4HnoIEv6YKu566x55m75b2VJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBnZXRWZXJpZmljYXRpb24ocGFyYW1zOiBhdXRoTW9kZWxzLkdldFZlcmlmaWNhdGlvblJlcXVlc3QpOiBQcm9taXNlPGF1dGhNb2RlbHMuR2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0VmVyaWZpY2F0aW9uKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5blvZPliY3nmbvlvZXnmoTnlKjmiLfkv6Hmga8t5ZCM5q2lXG4gICAqL1xuICBnZXQgY3VycmVudFVzZXIoKSB7XG4gICAgaWYgKHRoaXMuY2FjaGUubW9kZSA9PT0gJ2FzeW5jJykge1xuICAgICAgLy8gYXN5bmMgc3RvcmFnZeeahOW5s+WPsOiwg+eUqOatpEFQSeaPkOekulxuICAgICAgcHJpbnRXYXJuKFxuICAgICAgICBFUlJPUlMuSU5WQUxJRF9PUEVSQVRJT04sXG4gICAgICAgICdjdXJyZW50IHBsYXRmb3JtXFwncyBzdG9yYWdlIGlzIGFzeW5jaHJvbm91cywgcGxlYXNlIHVzZSBnZXRDdXJyZW50VXNlciBpbnN0ZWVkJ1xuICAgICAgKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgbG9naW5TdGF0ZSA9IHRoaXMuaGFzTG9naW5TdGF0ZSgpXG5cbiAgICBpZiAobG9naW5TdGF0ZSkge1xuICAgICAgcmV0dXJuIGxvZ2luU3RhdGUudXNlciB8fCBudWxsXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5b2T5YmN55m75b2V55qE55So5oi35L+h5oGvLeW8guatpVxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPlueUqOaIt+S/oeaBr+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuZ2V0Q3VycmVudFVzZXIoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGdldEN1cnJlbnRVc2VyKCkge1xuICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBhd2FpdCB0aGlzLmdldExvZ2luU3RhdGUoKVxuICAgIGlmIChsb2dpblN0YXRlKSB7XG4gICAgICBhd2FpdCBsb2dpblN0YXRlLnVzZXIuY2hlY2tMb2NhbEluZm9Bc3luYygpXG4gICAgICByZXR1cm4gbG9naW5TdGF0ZS51c2VyIHx8IG51bGxcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG5cbiAgLyoqXG4gICAqIOWMv+WQjeeZu+W9lVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfljL/lkI3nmbvlvZXlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDlvZPliY3njq/looPmmK/lkKblvIDlkK/kuobljL/lkI3nmbvlvZUnLFxuICAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuc2lnbkluQW5vbnltb3VzbHkoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHNpZ25JbkFub255bW91c2x5KGRhdGE6IHtcbiAgICBwcm92aWRlcl90b2tlbj86IHN0cmluZ1xuICB9ID0ge30pOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5Bbm9ueW1vdXNseShkYXRhKVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICB9XG5cbiAgLyoqXG4gICAqIOiuvue9ruiOt+WPluiHquWumuS5ieeZu+W9lSB0aWNrZXQg5Ye95pWwXG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5HZXRDdXN0b21TaWduVGlja2V0Rm59IGdldFRpY2tGblxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgcHVibGljIHNldEN1c3RvbVNpZ25GdW5jKGdldFRpY2tGbjogYXV0aE1vZGVscy5HZXRDdXN0b21TaWduVGlja2V0Rm4pOiB2b2lkIHtcbiAgICB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zZXRDdXN0b21TaWduRnVuYyhnZXRUaWNrRm4pXG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6Ieq5a6a5LmJ55m75b2V5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g5b2T5YmN546v5aKD5piv5ZCm5byA5ZCv5LqG6Ieq5a6a5LmJ55m75b2VJyxcbiAgICAgICcgIDIgLSDosIPnlKggYXV0aCgpLnNpZ25JbldpdGhDdXN0b21UaWNrZXQoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMyAtIHRpY2tldCDmmK/lkKblvZLlsZ7kuo7lvZPliY3njq/looMnLFxuICAgICAgJyAgNCAtIOWIm+W7uiB0aWNrZXQg55qE6Ieq5a6a5LmJ55m75b2V56eB6ZKl5piv5ZCm6L+H5pyfJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoQ3VzdG9tVGlja2V0KHBhcmFtcz86IHsgdmVyc2lvbj86IHN0cmluZ30pOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5XaXRoQ3VzdG9tVGlja2V0KHBhcmFtcylcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuU2lnbkluUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNpZ25JbihwYXJhbXM6IGF1dGhNb2RlbHMuU2lnbkluUmVxdWVzdCk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbihwYXJhbXMpXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZShwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLlNpZ25VcFJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfms6jlhozlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDlvZPliY3njq/looPmmK/lkKblvIDlkK/kuobmjIflrprnmbvlvZXmlrnlvI8nLFxuICAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuc2lnblVwKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBzaWduVXAocGFyYW1zOiBhdXRoTW9kZWxzLlNpZ25VcFJlcXVlc3QpOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduVXAocGFyYW1zKVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICB9XG5cbiAgLyoqXG4gICAqIOiuvue9ruWvhueggVxuICAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuU2V0UGFzc3dvcmRSZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0UGFzc3dvcmQocGFyYW1zOiBhdXRoTW9kZWxzLlNldFBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zZXRQYXNzd29yZChwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICog5qOA5rWL55So5oi35ZCN5piv5ZCm5bey57uP5Y2g55SoXG4gICAqIEBwYXJhbSB1c2VybmFtZVxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPlueUqOaIt+aYr+WQpuiiq+WNoOeUqOWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuaXNVc2VybmFtZVJlZ2lzdGVyZWQoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGlzVXNlcm5hbWVSZWdpc3RlcmVkKHVzZXJuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodHlwZW9mIHVzZXJuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3dFcnJvcihFUlJPUlMuSU5WQUxJRF9QQVJBTVMsICd1c2VybmFtZSBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG5cbiAgICBjb25zdCB7IGV4aXN0IH0gPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5jaGVja0lmVXNlckV4aXN0KHsgdXNlcm5hbWUgfSlcbiAgICByZXR1cm4gZXhpc3RcbiAgfVxuXG4gIC8qKlxuICAgKiDnmbvlh7pcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfnlKjmiLfnmbvlh7rlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLnNpZ25PdXQoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOW9k+WJjeeUqOaIt+aYr+WQpuS4uuWMv+WQjeeZu+W9le+8iOWMv+WQjeeZu+W9leS4jeaUr+aMgXNpZ25PdXTvvIknLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHNpZ25PdXQoKSB7XG4gICAgY29uc3QgeyB1c2VySW5mb0tleSB9ID0gdGhpcy5jYWNoZS5rZXlzXG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbk91dCgpXG4gICAgYXdhaXQgdGhpcy5jYWNoZS5yZW1vdmVTdG9yZUFzeW5jKHVzZXJJbmZvS2V5KVxuICAgIGV2ZW50QnVzLmZpcmUoRVZFTlRTLkxPR0lOX1NUQVRFX0NIQU5HRUQpXG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5pys5Zyw55m75b2V5oCBLeWQjOatpVxuICAgKi9cbiAgcHVibGljIGhhc0xvZ2luU3RhdGUoKTogTG9naW5TdGF0ZSB8IG51bGwge1xuICAgIGlmICh0aGlzLmNhY2hlLm1vZGUgPT09ICdhc3luYycpIHtcbiAgICAgIC8vIGFzeW5jIHN0b3JhZ2XnmoTlubPlj7DosIPnlKjmraRBUEnmj5DnpLpcbiAgICAgIHByaW50V2FybihcbiAgICAgICAgRVJST1JTLklOVkFMSURfT1BFUkFUSU9OLFxuICAgICAgICAnY3VycmVudCBwbGF0Zm9ybVxcJ3Mgc3RvcmFnZSBpcyBhc3luY2hyb25vdXMsIHBsZWFzZSB1c2UgZ2V0TG9naW5TdGF0ZSBpbnN0ZWVkJ1xuICAgICAgKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgb2F1dGhMb2dpblN0YXRlID0gdGhpcy5vYXV0aEluc3RhbmNlPy5hdXRoQXBpLmhhc0xvZ2luU3RhdGVTeW5jKClcbiAgICBpZiAob2F1dGhMb2dpblN0YXRlKSB7XG4gICAgICBjb25zdCBsb2dpblN0YXRlID0gbmV3IExvZ2luU3RhdGUoe1xuICAgICAgICBlbnZJZDogdGhpcy5jb25maWcuZW52LFxuICAgICAgICBjYWNoZTogdGhpcy5jYWNoZSxcbiAgICAgICAgb2F1dGhJbnN0YW5jZTogdGhpcy5vYXV0aEluc3RhbmNlLFxuICAgICAgfSlcbiAgICAgIHJldHVybiBsb2dpblN0YXRlXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5pys5Zyw55m75b2V5oCBLeW8guatpVxuICAgKiDmraRBUEnkuLrlhbzlrrnlvILmraVzdG9yYWdl55qE5bmz5Y+wXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6I635Y+W5pys5Zyw55m75b2V5oCB5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5nZXRMb2dpblN0YXRlKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBnZXRMb2dpblN0YXRlKCkge1xuICAgIGNvbnN0IG9hdXRoTG9naW5TdGF0ZSA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldExvZ2luU3RhdGUoKVxuICAgIGlmIChvYXV0aExvZ2luU3RhdGUpIHtcbiAgICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBuZXcgTG9naW5TdGF0ZSh7XG4gICAgICAgIGVudklkOiB0aGlzLmNvbmZpZy5lbnYsXG4gICAgICAgIGNhY2hlOiB0aGlzLmNhY2hlLFxuICAgICAgICBvYXV0aEluc3RhbmNlOiB0aGlzLm9hdXRoSW5zdGFuY2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIGxvZ2luU3RhdGVcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPlueUqOaIt+S/oeaBr+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOaYr+WQpuW3sueZu+W9lScsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5nZXRVc2VySW5mbygpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0VXNlckluZm8ocGFyYW1zPzogeyB2ZXJzaW9uPzogc3RyaW5nOyB9KTogUHJvbWlzZTxJVXNlckluZm8+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0VXNlckluZm8ocGFyYW1zKVxuICB9XG5cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPluW+ruaQreaPkuS7tueUqOaIt+S/oeaBr+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOaYr+WQpuW3sueZu+W9lScsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5nZXRXZWRhVXNlckluZm8oKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGdldFdlZGFVc2VySW5mbygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRXZWRhVXNlckluZm8oKVxuICB9XG5cbiAgLyoqXG4gICAqIGdldEF1dGhIZWFkZXIg5YW85a655aSE55CGXG4gICAqIOi/lOWbnuepuuWvueixoVxuICAgKi9cbiAgcHVibGljIGdldEF1dGhIZWFkZXIoKToge30ge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0F1dGguZ2V0QXV0aEhlYWRlciBBUEkg5bey5bqf5byDJylcbiAgICByZXR1cm4ge31cbiAgfVxuXG4gIC8qKlxuICAgKiDkuLrlt7LmnInotKbmiLfnu5HnrKzkuInmlrnotKbmiLdcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLkJpbmRXaXRoUHJvdmlkZXJSZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn57uR5a6a56ys5LiJ5pa555m75b2V5pa55byP5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5iaW5kV2l0aFByb3ZpZGVyKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDmraTotKbmiLfmmK/lkKblt7Lnu4/nu5HlrprmraTnrKzkuInmlrknLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGJpbmRXaXRoUHJvdmlkZXIocGFyYW1zOiBhdXRoTW9kZWxzLkJpbmRXaXRoUHJvdmlkZXJSZXF1ZXN0LCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5iaW5kV2l0aFByb3ZpZGVyKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDmn6Xor6LnlKjmiLdcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLlF1ZXJ5VXNlclByb2ZpbGVSZXF1ZXN0fSBhcHBlbmRlZF9wYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8YXV0aE1vZGVscy5Vc2VyUHJvZmlsZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcXVlcnlVc2VyKHF1ZXJ5T2JqOiBhdXRoTW9kZWxzLlF1ZXJ5VXNlclByb2ZpbGVSZXF1ZXN0KTogUHJvbWlzZTxhdXRoTW9kZWxzLlF1ZXJ5VXNlclByb2ZpbGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5xdWVyeVVzZXJQcm9maWxlKHF1ZXJ5T2JqKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFjY2Vzc1Rva2VuKCkge1xuICAgIGNvbnN0IG9hdXRoQWNjZXNzVG9rZW5SZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2Uub2F1dGgyY2xpZW50LmdldEFjY2Vzc1Rva2VuKClcbiAgICByZXR1cm4ge1xuICAgICAgYWNjZXNzVG9rZW46IG9hdXRoQWNjZXNzVG9rZW5SZXMsXG4gICAgICBlbnY6IHRoaXMuY29uZmlnLmVudixcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ3JhbnRQcm92aWRlclRva2VuKHBhcmFtczogYXV0aE1vZGVscy5HcmFudFByb3ZpZGVyVG9rZW5SZXF1ZXN0KTogUHJvbWlzZTxhdXRoTW9kZWxzLkdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdyYW50UHJvdmlkZXJUb2tlbihwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGF0Y2hQcm92aWRlclRva2VuKHBhcmFtczogYXV0aE1vZGVscy5QYXRjaFByb3ZpZGVyVG9rZW5SZXF1ZXN0KTogUHJvbWlzZTxhdXRoTW9kZWxzLlBhdGNoUHJvdmlkZXJUb2tlblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnBhdGNoUHJvdmlkZXJUb2tlbihwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aFByb3ZpZGVyKHBhcmFtczogYXV0aE1vZGVscy5TaWduSW5XaXRoUHJvdmlkZXJSZXF1ZXN0KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluV2l0aFByb3ZpZGVyKHBhcmFtcylcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBncmFudFRva2VuKHBhcmFtczogYXV0aE1vZGVscy5HcmFudFRva2VuUmVxdWVzdCk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdyYW50VG9rZW4ocGFyYW1zKVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdlblByb3ZpZGVyUmVkaXJlY3RVcmkocGFyYW1zOiBhdXRoTW9kZWxzLkdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXF1ZXN0KTogUHJvbWlzZTxhdXRoTW9kZWxzLkdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZW5Qcm92aWRlclJlZGlyZWN0VXJpKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZXNldFBhc3N3b3JkKHBhcmFtczogYXV0aE1vZGVscy5SZXNldFBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5yZXNldFBhc3N3b3JkKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZXZpY2VBdXRob3JpemUocGFyYW1zOiBhdXRoTW9kZWxzLkRldmljZUF1dGhvcml6ZVJlcXVlc3QpOiBQcm9taXNlPGF1dGhNb2RlbHMuRGV2aWNlQXV0aG9yaXplUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZGV2aWNlQXV0aG9yaXplKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdWRvKHBhcmFtczogYXV0aE1vZGVscy5TdWRvUmVxdWVzdCk6IFByb21pc2U8YXV0aE1vZGVscy5TdWRvUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc3VkbyhwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlTWUocGFyYW1zOiBhdXRoTW9kZWxzLldpdGhTdWRvUmVxdWVzdCk6IFByb21pc2U8YXV0aE1vZGVscy5Vc2VyUHJvZmlsZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5kZWxldGVNZShwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UHJvdmlkZXJzKCk6IFByb21pc2U8YXV0aE1vZGVscy5Vc2VyUHJvZmlsZVByb3ZpZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldFByb3ZpZGVycygpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9naW5TY29wZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5sb2dpblNjb3BlKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2dpbkdyb3VwcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmxvZ2luR3JvdXBzKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkxvZ2luU3RhdGVDaGFuZ2VkKGNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgIGV2ZW50QnVzLm9uKEVWRU5UUy5MT0dJTl9TVEFURV9DSEFOR0VELCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBsb2dpblN0YXRlID0gYXdhaXQgdGhpcy5nZXRMb2dpblN0YXRlKClcbiAgICAgIGNhbGxiYWNrLmNhbGwodGhpcywgbG9naW5TdGF0ZSlcbiAgICB9KVxuICAgIC8vIOeri+WIu+aJp+ihjOS4gOasoeWbnuiwg1xuICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBhd2FpdCB0aGlzLmdldExvZ2luU3RhdGUoKVxuICAgIGNhbGxiYWNrLmNhbGwodGhpcywgbG9naW5TdGF0ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiDlvLrliLbliLfmlrB0b2tlblxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVmcmVzaFRva2VuRm9yY2UocGFyYW1zOiB7IHZlcnNpb24/OiBzdHJpbmd9KTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5yZWZyZXNoVG9rZW5Gb3JjZShwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICog6I635Y+W6Lqr5Lu95L+h5oGvXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Q3JlZGVudGlhbHMoKTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRDcmVkZW50aWFscygpXG4gIH1cblxuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6I635Y+W6Lqr5Lu95rqQ57G75Z6LJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5nZXRQcm92aWRlclN1YlR5cGUoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGdldFByb3ZpZGVyU3ViVHlwZSgpOiBQcm9taXNlPFByb3ZpZGVyU3ViVHlwZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRQcm92aWRlclN1YlR5cGUoKVxuICB9XG5cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZUxvZ2luU3RhdGUocGFyYW1zPzogeyB2ZXJzaW9uPzogc3RyaW5nOyBxdWVyeT86IGFueSB9KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgY29uc3QgbG9naW5TdGF0ZSA9IG5ldyBMb2dpblN0YXRlKHtcbiAgICAgIGVudklkOiB0aGlzLmNvbmZpZy5lbnYsXG4gICAgICBjYWNoZTogdGhpcy5jYWNoZSxcbiAgICAgIG9hdXRoSW5zdGFuY2U6IHRoaXMub2F1dGhJbnN0YW5jZSxcbiAgICB9KVxuXG4gICAgYXdhaXQgbG9naW5TdGF0ZS5jaGVja0xvY2FsU3RhdGVBc3luYygpXG4gICAgYXdhaXQgbG9naW5TdGF0ZS51c2VyLnJlZnJlc2gocGFyYW1zKVxuICAgIGV2ZW50QnVzLmZpcmUoRVZFTlRTLkxPR0lOX1NUQVRFX0NIQU5HRUQpXG4gICAgcmV0dXJuIGxvZ2luU3RhdGVcbiAgfVxufVxuXG5jb25zdCBjb21wb25lbnQ6IElDbG91ZGJhc2VDb21wb25lbnQgPSB7XG4gIG5hbWU6IENPTVBPTkVOVF9OQU1FLFxuICBuYW1lc3BhY2U6ICdhdXRoJyxcbiAgZW50aXR5KGNvbmZpZzogUGljazxJQ2xvdWRiYXNlQXV0aENvbmZpZywgJ3JlZ2lvbicgfCAncGVyc2lzdGVuY2UnPiAmIFBhcnRpYWw8QXV0aE9wdGlvbnM+XG4gID0geyByZWdpb246ICcnLCBwZXJzaXN0ZW5jZTogJ2xvY2FsJyB9KSB7XG4gICAgaWYgKHRoaXMuYXV0aEluc3RhbmNlKSB7XG4gICAgICBwcmludFdhcm4oRVJST1JTLklOVkFMSURfT1BFUkFUSU9OLCAnZXZlcnkgY2xvdWRiYXNlIGluc3RhbmNlIHNob3VsZCBoYXMgb25seSBvbmUgYXV0aCBvYmplY3QnKVxuICAgICAgcmV0dXJuIHRoaXMuYXV0aEluc3RhbmNlXG4gICAgfVxuICAgIGNvbnN0IHsgYWRhcHRlciwgcnVudGltZSB9ID0gdGhpcy5wbGF0Zm9ybVxuICAgIC8vIOWmguS4jeaYjuehruaMh+WumnBlcnNpc3RlbmNl5YiZ5LyY5YWI5Y+W5ZCE5bmz5Y+wYWRhcHRlcummlumAie+8jOWFtuasoWxvY2FsU3RvcmFnZVxuICAgIGNvbnN0IG5ld1BlcnNpc3RlbmNlID0gY29uZmlnLnBlcnNpc3RlbmNlIHx8IGFkYXB0ZXIucHJpbWFyeVN0b3JhZ2VcbiAgICBpZiAobmV3UGVyc2lzdGVuY2UgJiYgKG5ld1BlcnNpc3RlbmNlICE9PSB0aGlzLmNvbmZpZy5wZXJzaXN0ZW5jZSkpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29uZmlnKHsgcGVyc2lzdGVuY2U6IG5ld1BlcnNpc3RlbmNlIH0pXG4gICAgfVxuXG4gICAgY29uc3QgeyBlbnYsIHBlcnNpc3RlbmNlLCBkZWJ1ZywgY2xpZW50SWQsIHN0b3JhZ2UgfSA9IHRoaXMuY29uZmlnXG4gICAgY29uc3Qgb2F1dGhJbnN0YW5jZSA9IG5ldyBDbG91ZGJhc2VPQXV0aCh7XG4gICAgICBjbGllbnRJZCxcbiAgICAgIGFwaU9yaWdpbjogdGhpcy5yZXF1ZXN0LmdldEJhc2VFbmRQb2ludCgpLFxuICAgICAgLy8gQHRvZG8g5Lul5LiL5pyA5aW96LWwYWRhcHRvcuWkhOeQhu+8jOebruWJjW9hdXRo5qih5Z2X5rKh5oyJYWRhcHRvcuaOpeWPo+iuvuiuoVxuICAgICAgc3RvcmFnZTogY29uZmlnPy5zdG9yYWdlIHx8IHN0b3JhZ2UsXG4gICAgICByZXF1ZXN0OiBjb25maWc/LnJlcXVlc3QsXG4gICAgICBhbm9ueW1vdXNTaWduSW5GdW5jOiBjb25maWc/LmFub255bW91c1NpZ25JbkZ1bmMsXG4gICAgfSlcblxuICAgIHRoaXMub2F1dGhJbnN0YW5jZSA9IG9hdXRoSW5zdGFuY2VcblxuICAgIHRoaXMuYXV0aEluc3RhbmNlID0gbmV3IEF1dGgoe1xuICAgICAgZW52LFxuICAgICAgcmVnaW9uOiBjb25maWcucmVnaW9uLFxuICAgICAgcGVyc2lzdGVuY2UsXG4gICAgICBkZWJ1ZyxcbiAgICAgIGNhY2hlOiB0aGlzLmNhY2hlLFxuICAgICAgLy8gcmVxdWVzdDogdGhpcy5yZXF1ZXN0LFxuICAgICAgcnVudGltZSxcbiAgICAgIF9mcm9tQXBwOiB0aGlzLFxuICAgICAgLy8gb2F1dGhJbnN0YW5jZTogdGhpcy5vYXV0aEluc3RhbmNlIHx8ICh0aGlzIGFzIGFueSkub2F1dGgoKVxuICAgICAgb2F1dGhJbnN0YW5jZSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIHRoaXMuYXV0aEluc3RhbmNlXG4gIH0sXG59XG5cbnRyeSB7XG4gIC8vIOWwneivleiHquWKqOazqOWGjOiHs+WFqOWxgOWPmOmHj2Nsb3VkYmFzZVxuICAvLyDmraTooYzkuLrlj6rlnKjmtY/op4jlmajnjq/looPkuIvmnInmlYhcbiAgY2xvdWRiYXNlLnJlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudClcbn0gY2F0Y2ggKGUpIHsgfVxuXG5leHBvcnQge1xuICBVc2VySW5mbyxcbiAgQXV0aCxcbn1cbi8qKlxuICogQGFwaSDmiYvliqjms6jlhozoh7NjbG91ZGJhc2UgYXBwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckF1dGgoYXBwOiBQaWNrPElDbG91ZGJhc2UsICdyZWdpc3RlckNvbXBvbmVudCc+KSB7XG4gIHRyeSB7XG4gICAgYXBwLnJlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudClcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUud2FybihlKVxuICB9XG59XG5cbiJdfQ==