@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,681 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ 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;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ import { ErrorType } from './consts';
49
+ import { ApiUrls, ApiUrlsV2 } from '../auth/consts';
50
+ import { uuidv4 } from '../utils/uuid';
51
+ import { SinglePromise } from '../utils/function/single-promise';
52
+ var RequestIdHeaderName = 'x-request-id';
53
+ var DeviceIdHeaderName = 'x-device-id';
54
+ var DeviceIdSectionName = 'device_id';
55
+ export var defaultRequest = function (url, options) {
56
+ return __awaiter(this, void 0, void 0, function () {
57
+ var result, responseError, copyOptions, responseResult, jsonResponse, error_1;
58
+ return __generator(this, function (_a) {
59
+ switch (_a.label) {
60
+ case 0:
61
+ result = null;
62
+ responseError = null;
63
+ _a.label = 1;
64
+ case 1:
65
+ _a.trys.push([1, 4, , 5]);
66
+ copyOptions = Object.assign({}, options);
67
+ if (!copyOptions.method) {
68
+ copyOptions.method = 'GET';
69
+ }
70
+ if (copyOptions.body && typeof copyOptions.body !== 'string') {
71
+ copyOptions.body = JSON.stringify(copyOptions.body);
72
+ }
73
+ return [4, fetch(url, copyOptions)];
74
+ case 2:
75
+ responseResult = _a.sent();
76
+ return [4, responseResult.json()];
77
+ case 3:
78
+ jsonResponse = _a.sent();
79
+ if (jsonResponse === null || jsonResponse === void 0 ? void 0 : jsonResponse.error) {
80
+ responseError = jsonResponse;
81
+ responseError.error_uri = new URL(url).pathname;
82
+ }
83
+ else {
84
+ result = jsonResponse;
85
+ }
86
+ return [3, 5];
87
+ case 4:
88
+ error_1 = _a.sent();
89
+ responseError = {
90
+ error: ErrorType.UNREACHABLE,
91
+ error_description: error_1.message,
92
+ error_uri: new URL(url).pathname,
93
+ };
94
+ return [3, 5];
95
+ case 5:
96
+ if (responseError) {
97
+ throw responseError;
98
+ }
99
+ else {
100
+ return [2, result];
101
+ }
102
+ return [2];
103
+ }
104
+ });
105
+ });
106
+ };
107
+ export var toResponseError = function (error, options) {
108
+ var responseError;
109
+ var formatOptions = options || {};
110
+ if (error instanceof Error) {
111
+ responseError = {
112
+ error: formatOptions.error || ErrorType.LOCAL,
113
+ error_description: formatOptions.error_description || error.message,
114
+ error_uri: formatOptions.error_uri,
115
+ details: formatOptions.details || error.stack,
116
+ };
117
+ }
118
+ else {
119
+ var formatError = error || {};
120
+ responseError = {
121
+ error: formatOptions.error || formatError.error || ErrorType.LOCAL,
122
+ error_description: formatOptions.error_description || formatError.error_description,
123
+ error_uri: formatOptions.error_uri || formatError.error_uri,
124
+ details: formatOptions.details || formatError.details,
125
+ };
126
+ }
127
+ return responseError;
128
+ };
129
+ export function generateRequestId() {
130
+ return uuidv4();
131
+ }
132
+ var DefaultStorage = (function () {
133
+ function DefaultStorage() {
134
+ }
135
+ DefaultStorage.prototype.getItem = function (key) {
136
+ return __awaiter(this, void 0, void 0, function () {
137
+ return __generator(this, function (_a) {
138
+ return [2, window.localStorage.getItem(key)];
139
+ });
140
+ });
141
+ };
142
+ DefaultStorage.prototype.removeItem = function (key) {
143
+ return __awaiter(this, void 0, void 0, function () {
144
+ return __generator(this, function (_a) {
145
+ window.localStorage.removeItem(key);
146
+ return [2];
147
+ });
148
+ });
149
+ };
150
+ DefaultStorage.prototype.setItem = function (key, value) {
151
+ return __awaiter(this, void 0, void 0, function () {
152
+ return __generator(this, function (_a) {
153
+ window.localStorage.setItem(key, value);
154
+ return [2];
155
+ });
156
+ });
157
+ };
158
+ DefaultStorage.prototype.getItemSync = function (key) {
159
+ return window.localStorage.getItem(key);
160
+ };
161
+ DefaultStorage.prototype.removeItemSync = function (key) {
162
+ window.localStorage.removeItem(key);
163
+ };
164
+ DefaultStorage.prototype.setItemSync = function (key, value) {
165
+ window.localStorage.setItem(key, value);
166
+ };
167
+ return DefaultStorage;
168
+ }());
169
+ export var defaultStorage = new DefaultStorage();
170
+ function isCredentialsExpired(credentials) {
171
+ var isExpired = true;
172
+ if ((credentials === null || credentials === void 0 ? void 0 : credentials.expires_at) && (credentials === null || credentials === void 0 ? void 0 : credentials.access_token)) {
173
+ isExpired = credentials.expires_at < new Date();
174
+ }
175
+ return isExpired;
176
+ }
177
+ var LocalCredentials = (function () {
178
+ function LocalCredentials(options) {
179
+ this.credentials = null;
180
+ this.singlePromise = new SinglePromise();
181
+ this.tokenSectionName = options.tokenSectionName;
182
+ this.storage = options.storage;
183
+ }
184
+ LocalCredentials.prototype.getStorageCredentialsSync = function () {
185
+ var credentials = null;
186
+ var tokenStr = this.storage.getItemSync(this.tokenSectionName);
187
+ if (tokenStr !== undefined && tokenStr !== null) {
188
+ try {
189
+ credentials = JSON.parse(tokenStr);
190
+ if (credentials === null || credentials === void 0 ? void 0 : credentials.expires_at) {
191
+ credentials.expires_at = new Date(credentials.expires_at);
192
+ }
193
+ }
194
+ catch (error) {
195
+ this.storage.removeItem(this.tokenSectionName);
196
+ credentials = null;
197
+ }
198
+ }
199
+ return credentials;
200
+ };
201
+ LocalCredentials.prototype.setCredentials = function (credentials) {
202
+ return __awaiter(this, void 0, void 0, function () {
203
+ var tokenStr;
204
+ return __generator(this, function (_a) {
205
+ switch (_a.label) {
206
+ case 0:
207
+ if (!(credentials === null || credentials === void 0 ? void 0 : credentials.expires_in)) return [3, 3];
208
+ credentials.expires_at = new Date(Date.now() + (credentials.expires_in - 30) * 1000);
209
+ if (!this.storage) return [3, 2];
210
+ tokenStr = JSON.stringify(credentials);
211
+ return [4, this.storage.setItem(this.tokenSectionName, tokenStr)];
212
+ case 1:
213
+ _a.sent();
214
+ _a.label = 2;
215
+ case 2:
216
+ this.credentials = credentials;
217
+ return [3, 6];
218
+ case 3:
219
+ if (!this.storage) return [3, 5];
220
+ return [4, this.storage.removeItem(this.tokenSectionName)];
221
+ case 4:
222
+ _a.sent();
223
+ _a.label = 5;
224
+ case 5:
225
+ this.credentials = null;
226
+ _a.label = 6;
227
+ case 6: return [2];
228
+ }
229
+ });
230
+ });
231
+ };
232
+ LocalCredentials.prototype.getCredentials = function () {
233
+ return __awaiter(this, void 0, void 0, function () {
234
+ var _this = this;
235
+ return __generator(this, function (_a) {
236
+ return [2, this.singlePromise.run('getCredentials', function () { return __awaiter(_this, void 0, void 0, function () {
237
+ var _a;
238
+ return __generator(this, function (_b) {
239
+ switch (_b.label) {
240
+ case 0:
241
+ if (!isCredentialsExpired(this.credentials)) return [3, 2];
242
+ _a = this;
243
+ return [4, this.getStorageCredentials()];
244
+ case 1:
245
+ _a.credentials = _b.sent();
246
+ _b.label = 2;
247
+ case 2: return [2, this.credentials];
248
+ }
249
+ });
250
+ }); })];
251
+ });
252
+ });
253
+ };
254
+ LocalCredentials.prototype.getStorageCredentials = function () {
255
+ return __awaiter(this, void 0, void 0, function () {
256
+ var _this = this;
257
+ return __generator(this, function (_a) {
258
+ return [2, this.singlePromise.run('_getStorageCredentials', function () { return __awaiter(_this, void 0, void 0, function () {
259
+ var credentials, tokenStr, error_2;
260
+ return __generator(this, function (_a) {
261
+ switch (_a.label) {
262
+ case 0:
263
+ credentials = null;
264
+ return [4, this.storage.getItem(this.tokenSectionName)];
265
+ case 1:
266
+ tokenStr = _a.sent();
267
+ if (!(tokenStr !== undefined && tokenStr !== null)) return [3, 5];
268
+ _a.label = 2;
269
+ case 2:
270
+ _a.trys.push([2, 3, , 5]);
271
+ credentials = JSON.parse(tokenStr);
272
+ if (credentials === null || credentials === void 0 ? void 0 : credentials.expires_at) {
273
+ credentials.expires_at = new Date(credentials.expires_at);
274
+ }
275
+ return [3, 5];
276
+ case 3:
277
+ error_2 = _a.sent();
278
+ return [4, this.storage.removeItem(this.tokenSectionName)];
279
+ case 4:
280
+ _a.sent();
281
+ credentials = null;
282
+ return [3, 5];
283
+ case 5: return [2, credentials];
284
+ }
285
+ });
286
+ }); })];
287
+ });
288
+ });
289
+ };
290
+ return LocalCredentials;
291
+ }());
292
+ export var OAuth2Client = (function () {
293
+ function OAuth2Client(options) {
294
+ this.singlePromise = new SinglePromise();
295
+ this.apiOrigin = options.apiOrigin;
296
+ this.clientId = options.clientId;
297
+ this.retry = this.formatRetry(options.retry, OAuth2Client.defaultRetry);
298
+ if (options.baseRequest) {
299
+ this.baseRequest = options.baseRequest;
300
+ }
301
+ else {
302
+ this.baseRequest = defaultRequest;
303
+ }
304
+ this.tokenInURL = options.tokenInURL;
305
+ this.headers = options.headers;
306
+ this.storage = options.storage || defaultStorage;
307
+ this.localCredentials = new LocalCredentials({
308
+ tokenSectionName: "credentials_".concat(options.clientId),
309
+ storage: this.storage,
310
+ });
311
+ this.clientSecret = options.clientSecret;
312
+ this.refreshTokenFunc = options.refreshTokenFunc || this.defaultRefreshTokenFunc;
313
+ this.anonymousSignInFunc = options.anonymousSignInFunc;
314
+ }
315
+ OAuth2Client.prototype.setCredentials = function (credentials) {
316
+ return this.localCredentials.setCredentials(credentials);
317
+ };
318
+ OAuth2Client.prototype.getAccessToken = function () {
319
+ return __awaiter(this, void 0, void 0, function () {
320
+ var credentials, respErr;
321
+ return __generator(this, function (_a) {
322
+ switch (_a.label) {
323
+ case 0: return [4, this.getCredentials()];
324
+ case 1:
325
+ credentials = _a.sent();
326
+ if (credentials === null || credentials === void 0 ? void 0 : credentials.access_token) {
327
+ return [2, Promise.resolve(credentials.access_token)];
328
+ }
329
+ respErr = { error: ErrorType.UNAUTHENTICATED };
330
+ return [2, Promise.reject(respErr)];
331
+ }
332
+ });
333
+ });
334
+ };
335
+ OAuth2Client.prototype.request = function (url, options) {
336
+ return __awaiter(this, void 0, void 0, function () {
337
+ var retry, deviceId, credentials, response, maxRequestTimes, requestTime, responseError_1;
338
+ return __generator(this, function (_a) {
339
+ switch (_a.label) {
340
+ case 0:
341
+ if (!options) {
342
+ options = {};
343
+ }
344
+ retry = this.formatRetry(options.retry, this.retry);
345
+ options.headers = options.headers || {};
346
+ if (this.headers) {
347
+ options.headers = __assign(__assign({}, this.headers), options.headers);
348
+ }
349
+ if (!options.headers[RequestIdHeaderName]) {
350
+ options.headers[RequestIdHeaderName] = generateRequestId();
351
+ }
352
+ if (!!options.headers[DeviceIdHeaderName]) return [3, 2];
353
+ return [4, this.getDeviceId()];
354
+ case 1:
355
+ deviceId = _a.sent();
356
+ options.headers[DeviceIdHeaderName] = deviceId;
357
+ _a.label = 2;
358
+ case 2:
359
+ if (!(options === null || options === void 0 ? void 0 : options.withCredentials)) return [3, 4];
360
+ return [4, this.getCredentials()];
361
+ case 3:
362
+ credentials = _a.sent();
363
+ if (credentials) {
364
+ if (this.tokenInURL) {
365
+ if (url.indexOf('?') < 0) {
366
+ url += '?';
367
+ }
368
+ url += "access_token=".concat(credentials.access_token);
369
+ }
370
+ else {
371
+ options.headers.Authorization = "".concat(credentials.token_type, " ").concat(credentials.access_token);
372
+ }
373
+ }
374
+ return [3, 5];
375
+ case 4:
376
+ if (this.clientId && url.indexOf('client_id') < 0) {
377
+ url += url.indexOf('?') < 0 ? '?' : '&';
378
+ url += "client_id=".concat(this.clientId);
379
+ }
380
+ _a.label = 5;
381
+ case 5:
382
+ if (url.startsWith('/')) {
383
+ url = this.apiOrigin + url;
384
+ }
385
+ response = null;
386
+ maxRequestTimes = retry + 1;
387
+ requestTime = 0;
388
+ _a.label = 6;
389
+ case 6:
390
+ if (!(requestTime < maxRequestTimes)) return [3, 15];
391
+ _a.label = 7;
392
+ case 7:
393
+ _a.trys.push([7, 9, , 12]);
394
+ return [4, this.baseRequest(url, options)];
395
+ case 8:
396
+ response = _a.sent();
397
+ return [3, 15];
398
+ case 9:
399
+ responseError_1 = _a.sent();
400
+ if (!(options.withCredentials && responseError_1 && responseError_1.error === ErrorType.UNAUTHENTICATED)) return [3, 11];
401
+ return [4, this.setCredentials(null)];
402
+ case 10:
403
+ _a.sent();
404
+ return [2, Promise.reject(responseError_1)];
405
+ case 11:
406
+ if (requestTime === retry
407
+ || !responseError_1
408
+ || responseError_1.error !== 'unreachable') {
409
+ return [2, Promise.reject(responseError_1)];
410
+ }
411
+ return [3, 12];
412
+ case 12: return [4, this.sleep(OAuth2Client.retryInterval)];
413
+ case 13:
414
+ _a.sent();
415
+ _a.label = 14;
416
+ case 14:
417
+ requestTime++;
418
+ return [3, 6];
419
+ case 15: return [2, response];
420
+ }
421
+ });
422
+ });
423
+ };
424
+ OAuth2Client.prototype.getCredentials = function () {
425
+ return __awaiter(this, void 0, void 0, function () {
426
+ var credentials, c, _a;
427
+ return __generator(this, function (_b) {
428
+ switch (_b.label) {
429
+ case 0: return [4, this.localCredentials.getCredentials()];
430
+ case 1:
431
+ credentials = _b.sent();
432
+ if (!isCredentialsExpired(credentials)) return [3, 10];
433
+ if (!(credentials && credentials.scope === 'anonymous')) return [3, 8];
434
+ if (!this.anonymousSignInFunc) return [3, 5];
435
+ return [4, this.anonymousSignInFunc(credentials)];
436
+ case 2:
437
+ c = _b.sent();
438
+ _a = c;
439
+ if (_a) return [3, 4];
440
+ return [4, this.localCredentials.getCredentials()];
441
+ case 3:
442
+ _a = (_b.sent());
443
+ _b.label = 4;
444
+ case 4:
445
+ credentials = _a;
446
+ return [3, 7];
447
+ case 5: return [4, this.anonymousSignIn(credentials)];
448
+ case 6:
449
+ credentials = _b.sent();
450
+ _b.label = 7;
451
+ case 7: return [3, 10];
452
+ case 8: return [4, this.refreshToken(credentials)];
453
+ case 9:
454
+ credentials = _b.sent();
455
+ _b.label = 10;
456
+ case 10: return [2, credentials];
457
+ }
458
+ });
459
+ });
460
+ };
461
+ OAuth2Client.prototype.getCredentialsSync = function () {
462
+ var credentials = this.localCredentials.getStorageCredentialsSync();
463
+ return credentials;
464
+ };
465
+ OAuth2Client.prototype.getCredentialsAsync = function () {
466
+ return this.getCredentials();
467
+ };
468
+ OAuth2Client.prototype.getScope = function () {
469
+ return __awaiter(this, void 0, void 0, function () {
470
+ var credentials;
471
+ return __generator(this, function (_a) {
472
+ switch (_a.label) {
473
+ case 0: return [4, this.localCredentials.getCredentials()];
474
+ case 1:
475
+ credentials = _a.sent();
476
+ if (!credentials) {
477
+ return [2, this.unAuthenticatedError('credentials not found')];
478
+ }
479
+ return [2, credentials.scope];
480
+ }
481
+ });
482
+ });
483
+ };
484
+ OAuth2Client.prototype.getGroups = function () {
485
+ return __awaiter(this, void 0, void 0, function () {
486
+ var credentials;
487
+ return __generator(this, function (_a) {
488
+ switch (_a.label) {
489
+ case 0: return [4, this.localCredentials.getCredentials()];
490
+ case 1:
491
+ credentials = _a.sent();
492
+ if (!credentials) {
493
+ return [2, this.unAuthenticatedError('credentials not found')];
494
+ }
495
+ return [2, credentials.groups];
496
+ }
497
+ });
498
+ });
499
+ };
500
+ OAuth2Client.prototype.refreshToken = function (credentials) {
501
+ return __awaiter(this, void 0, void 0, function () {
502
+ var _this = this;
503
+ return __generator(this, function (_a) {
504
+ return [2, this.singlePromise.run('_refreshToken', function () { return __awaiter(_this, void 0, void 0, function () {
505
+ var newCredentials, error_3;
506
+ return __generator(this, function (_a) {
507
+ switch (_a.label) {
508
+ case 0:
509
+ if (!credentials || !credentials.refresh_token) {
510
+ return [2, this.unAuthenticatedError('no refresh token found in credentials')];
511
+ }
512
+ _a.label = 1;
513
+ case 1:
514
+ _a.trys.push([1, 4, , 7]);
515
+ return [4, this.refreshTokenFunc(credentials.refresh_token, credentials)];
516
+ case 2:
517
+ newCredentials = _a.sent();
518
+ return [4, this.localCredentials.setCredentials(newCredentials)];
519
+ case 3:
520
+ _a.sent();
521
+ return [2, newCredentials];
522
+ case 4:
523
+ error_3 = _a.sent();
524
+ if (!(error_3.error === ErrorType.INVALID_GRANT)) return [3, 6];
525
+ return [4, this.localCredentials.setCredentials(null)];
526
+ case 5:
527
+ _a.sent();
528
+ return [2, this.unAuthenticatedError(error_3.error_description)];
529
+ case 6: return [2, Promise.reject(error_3)];
530
+ case 7: return [2];
531
+ }
532
+ });
533
+ }); })];
534
+ });
535
+ });
536
+ };
537
+ OAuth2Client.prototype.checkRetry = function (retry) {
538
+ var responseError = null;
539
+ if (typeof retry !== 'number'
540
+ || retry < OAuth2Client.minRetry
541
+ || retry > OAuth2Client.maxRetry) {
542
+ responseError = {
543
+ error: ErrorType.UNREACHABLE,
544
+ error_description: 'wrong options param: retry',
545
+ };
546
+ }
547
+ if (responseError) {
548
+ throw responseError;
549
+ }
550
+ return retry;
551
+ };
552
+ OAuth2Client.prototype.formatRetry = function (retry, defaultVale) {
553
+ if (typeof retry === 'undefined') {
554
+ return defaultVale;
555
+ }
556
+ return this.checkRetry(retry);
557
+ };
558
+ OAuth2Client.prototype.sleep = function (ms) {
559
+ return __awaiter(this, void 0, void 0, function () {
560
+ return __generator(this, function (_a) {
561
+ return [2, new Promise(function (resolve) {
562
+ setTimeout(function () {
563
+ resolve();
564
+ }, ms);
565
+ })];
566
+ });
567
+ });
568
+ };
569
+ OAuth2Client.prototype.anonymousSignIn = function (credentials) {
570
+ return __awaiter(this, void 0, void 0, function () {
571
+ var _this = this;
572
+ return __generator(this, function (_a) {
573
+ return [2, this.singlePromise.run('_anonymous', function () { return __awaiter(_this, void 0, void 0, function () {
574
+ var newCredentials, error_4;
575
+ return __generator(this, function (_a) {
576
+ switch (_a.label) {
577
+ case 0:
578
+ if (!credentials || credentials.scope !== 'anonymous') {
579
+ return [2, this.unAuthenticatedError('no anonymous in credentials')];
580
+ }
581
+ _a.label = 1;
582
+ case 1:
583
+ _a.trys.push([1, 4, , 7]);
584
+ return [4, this.request('/auth/v1/signin/anonymously', {
585
+ method: 'POST',
586
+ body: {
587
+ client_id: this.clientId,
588
+ client_secret: this.clientSecret,
589
+ },
590
+ })];
591
+ case 2:
592
+ newCredentials = _a.sent();
593
+ return [4, this.localCredentials.setCredentials(newCredentials)];
594
+ case 3:
595
+ _a.sent();
596
+ return [2, newCredentials];
597
+ case 4:
598
+ error_4 = _a.sent();
599
+ if (!(error_4.error === ErrorType.INVALID_GRANT)) return [3, 6];
600
+ return [4, this.localCredentials.setCredentials(null)];
601
+ case 5:
602
+ _a.sent();
603
+ return [2, this.unAuthenticatedError(error_4.error_description)];
604
+ case 6: return [2, Promise.reject(error_4)];
605
+ case 7: return [2];
606
+ }
607
+ });
608
+ }); })];
609
+ });
610
+ });
611
+ };
612
+ OAuth2Client.prototype.defaultRefreshTokenFunc = function (refreshToken, credentials) {
613
+ return __awaiter(this, void 0, void 0, function () {
614
+ var url, newCredentials;
615
+ return __generator(this, function (_a) {
616
+ switch (_a.label) {
617
+ case 0:
618
+ if (refreshToken === undefined || refreshToken === '') {
619
+ return [2, this.unAuthenticatedError('refresh token not found')];
620
+ }
621
+ url = ApiUrls.AUTH_TOKEN_URL;
622
+ if ((credentials === null || credentials === void 0 ? void 0 : credentials.version) === 'v2') {
623
+ url = ApiUrlsV2.AUTH_TOKEN_URL;
624
+ }
625
+ return [4, this.request(url, {
626
+ method: 'POST',
627
+ body: {
628
+ client_id: this.clientId,
629
+ client_secret: this.clientSecret,
630
+ grant_type: 'refresh_token',
631
+ refresh_token: refreshToken,
632
+ },
633
+ })];
634
+ case 1:
635
+ newCredentials = _a.sent();
636
+ return [2, __assign(__assign({}, newCredentials), { version: (credentials === null || credentials === void 0 ? void 0 : credentials.version) || 'v1' })];
637
+ }
638
+ });
639
+ });
640
+ };
641
+ OAuth2Client.prototype.getDeviceId = function () {
642
+ return __awaiter(this, void 0, void 0, function () {
643
+ var deviceId;
644
+ return __generator(this, function (_a) {
645
+ switch (_a.label) {
646
+ case 0:
647
+ if (this.deviceID) {
648
+ return [2, this.deviceID];
649
+ }
650
+ return [4, this.storage.getItem(DeviceIdSectionName)];
651
+ case 1:
652
+ deviceId = _a.sent();
653
+ if (!!(typeof deviceId === 'string'
654
+ && deviceId.length >= 16
655
+ && deviceId.length <= 48)) return [3, 3];
656
+ deviceId = uuidv4();
657
+ return [4, this.storage.setItem(DeviceIdSectionName, deviceId)];
658
+ case 2:
659
+ _a.sent();
660
+ _a.label = 3;
661
+ case 3:
662
+ this.deviceID = deviceId;
663
+ return [2, deviceId];
664
+ }
665
+ });
666
+ });
667
+ };
668
+ OAuth2Client.prototype.unAuthenticatedError = function (err) {
669
+ var respErr = {
670
+ error: ErrorType.UNAUTHENTICATED,
671
+ error_description: err,
672
+ };
673
+ return Promise.reject(respErr);
674
+ };
675
+ OAuth2Client.defaultRetry = 2;
676
+ OAuth2Client.minRetry = 0;
677
+ OAuth2Client.maxRetry = 5;
678
+ OAuth2Client.retryInterval = 1000;
679
+ return OAuth2Client;
680
+ }());
681
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgyY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29hdXRoMmNsaWVudC9vYXV0aDJjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3BDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFhbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUV0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUE7QUFFaEUsSUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUE7QUFDMUMsSUFBTSxrQkFBa0IsR0FBRyxhQUFhLENBQUE7QUFDeEMsSUFBTSxtQkFBbUIsR0FBRyxXQUFXLENBQUE7QUFVdkMsTUFBTSxDQUFDLElBQU0sY0FBYyxHQUFvQixVQUM3QyxHQUFXLEVBQ1gsT0FBd0I7Ozs7OztvQkFFcEIsTUFBTSxHQUFhLElBQUksQ0FBQTtvQkFDdkIsYUFBYSxHQUF5QixJQUFJLENBQUE7Ozs7b0JBR3RDLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtvQkFDOUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7d0JBQ3ZCLFdBQVcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFBO3FCQUMzQjtvQkFDRCxJQUFJLFdBQVcsQ0FBQyxJQUFJLElBQUksT0FBTyxXQUFXLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTt3QkFDNUQsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtxQkFDcEQ7b0JBQ2dDLFdBQU0sS0FBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLENB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ckMsbUJBQUM7Q0FBQSxBQXJXRCxJQXFXQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVycm9yVHlwZSB9IGZyb20gJy4vY29uc3RzJ1xuaW1wb3J0IHsgQXBpVXJscywgQXBpVXJsc1YyIH0gZnJvbSAnLi4vYXV0aC9jb25zdHMnXG5cbmltcG9ydCB7IEF1dGhDbGllbnQsIFNpbXBsZVN0b3JhZ2UgfSBmcm9tICcuL2ludGVyZmFjZSdcblxuaW1wb3J0IHtcbiAgQ3JlZGVudGlhbHMsXG4gIFJlc3BvbnNlRXJyb3IsXG4gIFJlcXVlc3RPcHRpb25zLFxuICBSZXF1ZXN0RnVuY3Rpb24sXG4gIE9BdXRoMkNsaWVudE9wdGlvbnMsXG4gIEF1dGhDbGllbnRSZXF1ZXN0T3B0aW9ucyxcbn0gZnJvbSAnLi9tb2RlbHMnXG5cbmltcG9ydCB7IHV1aWR2NCB9IGZyb20gJy4uL3V0aWxzL3V1aWQnXG5cbmltcG9ydCB7IFNpbmdsZVByb21pc2UgfSBmcm9tICcuLi91dGlscy9mdW5jdGlvbi9zaW5nbGUtcHJvbWlzZSdcblxuY29uc3QgUmVxdWVzdElkSGVhZGVyTmFtZSA9ICd4LXJlcXVlc3QtaWQnXG5jb25zdCBEZXZpY2VJZEhlYWRlck5hbWUgPSAneC1kZXZpY2UtaWQnXG5jb25zdCBEZXZpY2VJZFNlY3Rpb25OYW1lID0gJ2RldmljZV9pZCdcblxuZXhwb3J0IGludGVyZmFjZSBUb1Jlc3BvbnNlRXJyb3JPcHRpb25zIHtcbiAgZXJyb3I/OiBFcnJvclR5cGU7XG4gIGVycm9yX2Rlc2NyaXB0aW9uPzogc3RyaW5nIHwgbnVsbDtcbiAgZXJyb3JfdXJpPzogc3RyaW5nIHwgbnVsbDtcbiAgZGV0YWlscz86IGFueSB8IG51bGw7XG59XG5cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZXF1ZXN0OiBSZXF1ZXN0RnVuY3Rpb24gPSBhc3luYyBmdW5jdGlvbiA8VD4oXG4gIHVybDogc3RyaW5nLFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8VD4ge1xuICBsZXQgcmVzdWx0OiBUIHwgbnVsbCA9IG51bGxcbiAgbGV0IHJlc3BvbnNlRXJyb3I6IFJlc3BvbnNlRXJyb3IgfCBudWxsID0gbnVsbFxuICB0cnkge1xuICAgIC8vIE9iamVjdHMgbXVzdCBiZSBjb3BpZWQgdG8gcHJldmVudCBtb2RpZmljYXRpb24gb2YgZGF0YSBzdWNoIGFzIGJvZHkuXG4gICAgY29uc3QgY29weU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKVxuICAgIGlmICghY29weU9wdGlvbnMubWV0aG9kKSB7XG4gICAgICBjb3B5T3B0aW9ucy5tZXRob2QgPSAnR0VUJ1xuICAgIH1cbiAgICBpZiAoY29weU9wdGlvbnMuYm9keSAmJiB0eXBlb2YgY29weU9wdGlvbnMuYm9keSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNvcHlPcHRpb25zLmJvZHkgPSBKU09OLnN0cmluZ2lmeShjb3B5T3B0aW9ucy5ib2R5KVxuICAgIH1cbiAgICBjb25zdCByZXNwb25zZVJlc3VsdDogUmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIGNvcHlPcHRpb25zKVxuICAgIGNvbnN0IGpzb25SZXNwb25zZSA9IGF3YWl0IHJlc3BvbnNlUmVzdWx0Lmpzb24oKVxuICAgIGlmIChqc29uUmVzcG9uc2U/LmVycm9yKSB7XG4gICAgICByZXNwb25zZUVycm9yID0ganNvblJlc3BvbnNlIGFzIFJlc3BvbnNlRXJyb3JcbiAgICAgIHJlc3BvbnNlRXJyb3IuZXJyb3JfdXJpID0gbmV3IFVSTCh1cmwpLnBhdGhuYW1lXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IGpzb25SZXNwb25zZSBhcyBUXG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlc3BvbnNlRXJyb3IgPSB7XG4gICAgICBlcnJvcjogRXJyb3JUeXBlLlVOUkVBQ0hBQkxFLFxuICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2UsXG4gICAgICBlcnJvcl91cmk6IG5ldyBVUkwodXJsKS5wYXRobmFtZSxcbiAgICB9XG4gIH1cbiAgaWYgKHJlc3BvbnNlRXJyb3IpIHtcbiAgICB0aHJvdyByZXNwb25zZUVycm9yXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCB0b1Jlc3BvbnNlRXJyb3IgPSAoXG4gIGVycm9yOiBSZXNwb25zZUVycm9yIHwgRXJyb3IsXG4gIG9wdGlvbnM/OiBUb1Jlc3BvbnNlRXJyb3JPcHRpb25zLFxuKTogUmVzcG9uc2VFcnJvciA9PiB7XG4gIGxldCByZXNwb25zZUVycm9yOiBSZXNwb25zZUVycm9yXG4gIGNvbnN0IGZvcm1hdE9wdGlvbnM6IFRvUmVzcG9uc2VFcnJvck9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgcmVzcG9uc2VFcnJvciA9IHtcbiAgICAgIGVycm9yOiBmb3JtYXRPcHRpb25zLmVycm9yIHx8IEVycm9yVHlwZS5MT0NBTCxcbiAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBmb3JtYXRPcHRpb25zLmVycm9yX2Rlc2NyaXB0aW9uIHx8IGVycm9yLm1lc3NhZ2UsXG4gICAgICBlcnJvcl91cmk6IGZvcm1hdE9wdGlvbnMuZXJyb3JfdXJpLFxuICAgICAgZGV0YWlsczogZm9ybWF0T3B0aW9ucy5kZXRhaWxzIHx8IGVycm9yLnN0YWNrLFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBmb3JtYXRFcnJvcjogVG9SZXNwb25zZUVycm9yT3B0aW9ucyA9IGVycm9yIHx8IHt9XG4gICAgcmVzcG9uc2VFcnJvciA9IHtcbiAgICAgIGVycm9yOiBmb3JtYXRPcHRpb25zLmVycm9yIHx8IGZvcm1hdEVycm9yLmVycm9yIHx8IEVycm9yVHlwZS5MT0NBTCxcbiAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOlxuICAgICAgICBmb3JtYXRPcHRpb25zLmVycm9yX2Rlc2NyaXB0aW9uIHx8IGZvcm1hdEVycm9yLmVycm9yX2Rlc2NyaXB0aW9uLFxuICAgICAgZXJyb3JfdXJpOiBmb3JtYXRPcHRpb25zLmVycm9yX3VyaSB8fCBmb3JtYXRFcnJvci5lcnJvcl91cmksXG4gICAgICBkZXRhaWxzOiBmb3JtYXRPcHRpb25zLmRldGFpbHMgfHwgZm9ybWF0RXJyb3IuZGV0YWlscyxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlRXJyb3Jcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSByZXF1ZXN0IGlkLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVSZXF1ZXN0SWQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIHV1aWR2NCgpXG59XG5cblxuLyoqXG4gKiBEZWZhdWx0IFN0b3JhZ2UuXG4gKi9cbmNsYXNzIERlZmF1bHRTdG9yYWdlIGltcGxlbWVudHMgU2ltcGxlU3RvcmFnZSB7XG4gIC8qKlxuICAgICAqIEdldCBpdGVtLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICAgKi9cbiAgYXN5bmMgZ2V0SXRlbShrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KVxuICB9XG5cbiAgLyoqXG4gICAgICogUmVtb3ZlIGl0ZW0uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgICAqL1xuICBhc3luYyByZW1vdmVJdGVtKGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSlcbiAgfVxuXG4gIC8qKlxuICAgICAqIFNldCBpdGVtLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICAgKi9cbiAgYXN5bmMgc2V0SXRlbShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAgICogR2V0IGl0ZW0gc3luYy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAgICovXG4gIGdldEl0ZW1TeW5jKGtleTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpXG4gIH1cblxuICAvKipcbiAgICAgKiBSZW1vdmUgaXRlbSBzeW5jLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICAgKi9cbiAgcmVtb3ZlSXRlbVN5bmMoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KVxuICB9XG5cbiAgLyoqXG4gICAgICogU2V0IGl0ZW0gc3luYy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAgICovXG4gIHNldEl0ZW1TeW5jKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRTdG9yYWdlID0gbmV3IERlZmF1bHRTdG9yYWdlKClcblxuaW50ZXJmYWNlIExvY2FsQ3JlZGVudGlhbHNPcHRpb25zIHtcbiAgdG9rZW5TZWN0aW9uTmFtZTogc3RyaW5nO1xuICBzdG9yYWdlOiBTaW1wbGVTdG9yYWdlO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGNyZWRlbnRpYWxzIGlzIGV4cGlyZWQuXG4gKiBAcGFyYW0ge0NyZWRlbnRpYWxzfSBjcmVkZW50aWFsc1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNDcmVkZW50aWFsc0V4cGlyZWQoY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzKTogYm9vbGVhbiB7XG4gIGxldCBpc0V4cGlyZWQgPSB0cnVlXG4gIGlmIChjcmVkZW50aWFscz8uZXhwaXJlc19hdCAmJiBjcmVkZW50aWFscz8uYWNjZXNzX3Rva2VuKSB7XG4gICAgaXNFeHBpcmVkID0gY3JlZGVudGlhbHMuZXhwaXJlc19hdCA8IG5ldyBEYXRlKClcbiAgfVxuICByZXR1cm4gaXNFeHBpcmVkXG59XG5cbi8qKlxuICogTG9jYWwgY3JlZGVudGlhbHMuXG4gKiBMb2NhbCBjcmVkZW50aWFscywgd2l0aCBtZW1vcnkgY2FjaGUgYW5kIHN0b3JhZ2UgY2FjaGUuXG4gKiBJZiB0aGUgbWVtb3J5IGNhY2hlIGV4cGlyZXMsIHRoZSBzdG9yYWdlIGNhY2hlIGlzIGF1dG9tYXRpY2FsbHkgbG9hZGVkLlxuICovXG5jbGFzcyBMb2NhbENyZWRlbnRpYWxzIHtcbiAgcHJpdmF0ZSB0b2tlblNlY3Rpb25OYW1lOiBzdHJpbmdcblxuICBwcml2YXRlIHN0b3JhZ2U6IFNpbXBsZVN0b3JhZ2VcblxuICBwcml2YXRlIGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyB8IG51bGwgPSBudWxsXG5cbiAgcHJpdmF0ZSBzaW5nbGVQcm9taXNlOiBTaW5nbGVQcm9taXNlID0gbmV3IFNpbmdsZVByb21pc2UoKVxuXG4gIC8qKlxuICAgKiBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge0xvY2FsQ3JlZGVudGlhbHNPcHRpb25zfSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBMb2NhbENyZWRlbnRpYWxzT3B0aW9ucykge1xuICAgIHRoaXMudG9rZW5TZWN0aW9uTmFtZSA9IG9wdGlvbnMudG9rZW5TZWN0aW9uTmFtZVxuICAgIHRoaXMuc3RvcmFnZSA9IG9wdGlvbnMuc3RvcmFnZVxuICB9XG5cbiAgcHVibGljIGdldFN0b3JhZ2VDcmVkZW50aWFsc1N5bmMoKTogQ3JlZGVudGlhbHMgfCBudWxsIHtcbiAgICBsZXQgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gbnVsbFxuICAgIGNvbnN0IHRva2VuU3RyOiBzdHJpbmcgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbVN5bmModGhpcy50b2tlblNlY3Rpb25OYW1lLClcbiAgICBpZiAodG9rZW5TdHIgIT09IHVuZGVmaW5lZCAmJiB0b2tlblN0ciAhPT0gbnVsbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY3JlZGVudGlhbHMgPSBKU09OLnBhcnNlKHRva2VuU3RyKVxuICAgICAgICBpZiAoY3JlZGVudGlhbHM/LmV4cGlyZXNfYXQpIHtcbiAgICAgICAgICBjcmVkZW50aWFscy5leHBpcmVzX2F0ID0gbmV3IERhdGUoY3JlZGVudGlhbHMuZXhwaXJlc19hdClcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy50b2tlblNlY3Rpb25OYW1lKVxuICAgICAgICBjcmVkZW50aWFscyA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gIH1cblxuICAvKipcbiAgICogc2V0Q3JlZGVudGlhbHMgUHJvdmlkZXMgYW4gYWx0ZXJuYXRpdmUgZmV0Y2ggYXBpIHJlcXVlc3QgaW1wbGVtZW50YXRpb24gd2l0aCBhdXRoIGNyZWRlbnRpYWxzXG4gICAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHM/OiBDcmVkZW50aWFscyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChjcmVkZW50aWFscz8uZXhwaXJlc19pbikge1xuICAgICAgY3JlZGVudGlhbHMuZXhwaXJlc19hdCA9IG5ldyBEYXRlKERhdGUubm93KCkgKyAoY3JlZGVudGlhbHMuZXhwaXJlc19pbiAtIDMwKSAqIDEwMDAsKVxuICAgICAgaWYgKHRoaXMuc3RvcmFnZSkge1xuICAgICAgICBjb25zdCB0b2tlblN0cjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoY3JlZGVudGlhbHMpXG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXRJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSwgdG9rZW5TdHIpXG4gICAgICB9XG4gICAgICB0aGlzLmNyZWRlbnRpYWxzID0gY3JlZGVudGlhbHNcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuc3RvcmFnZSkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnRva2VuU2VjdGlvbk5hbWUpXG4gICAgICB9XG4gICAgICB0aGlzLmNyZWRlbnRpYWxzID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3JlZGVudGlhbHMuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHMgfCBudWxsPn1cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDcmVkZW50aWFscygpOiBQcm9taXNlPENyZWRlbnRpYWxzIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLnNpbmdsZVByb21pc2UucnVuKCdnZXRDcmVkZW50aWFscycsIGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChpc0NyZWRlbnRpYWxzRXhwaXJlZCh0aGlzLmNyZWRlbnRpYWxzKSkge1xuICAgICAgICB0aGlzLmNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5nZXRTdG9yYWdlQ3JlZGVudGlhbHMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY3JlZGVudGlhbHNcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzdG9yYWdlIGNyZWRlbnRpYWxzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRTdG9yYWdlQ3JlZGVudGlhbHMoKTogUHJvbWlzZTxDcmVkZW50aWFscyB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5zaW5nbGVQcm9taXNlLnJ1bignX2dldFN0b3JhZ2VDcmVkZW50aWFscycsIGFzeW5jICgpID0+IHtcbiAgICAgIGxldCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBudWxsXG4gICAgICBjb25zdCB0b2tlblN0cjogc3RyaW5nID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldEl0ZW0odGhpcy50b2tlblNlY3Rpb25OYW1lLClcbiAgICAgIGlmICh0b2tlblN0ciAhPT0gdW5kZWZpbmVkICYmIHRva2VuU3RyICE9PSBudWxsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY3JlZGVudGlhbHMgPSBKU09OLnBhcnNlKHRva2VuU3RyKVxuICAgICAgICAgIGlmIChjcmVkZW50aWFscz8uZXhwaXJlc19hdCkge1xuICAgICAgICAgICAgY3JlZGVudGlhbHMuZXhwaXJlc19hdCA9IG5ldyBEYXRlKGNyZWRlbnRpYWxzLmV4cGlyZXNfYXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgICAgICBjcmVkZW50aWFscyA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIE9BdXRoMkNsaWVudFxuICovXG5leHBvcnQgY2xhc3MgT0F1dGgyQ2xpZW50IGltcGxlbWVudHMgQXV0aENsaWVudCB7XG4gIHByaXZhdGUgc3RhdGljIGRlZmF1bHRSZXRyeSA9IDJcbiAgcHJpdmF0ZSBzdGF0aWMgbWluUmV0cnkgPSAwXG4gIHByaXZhdGUgc3RhdGljIG1heFJldHJ5ID0gNVxuICBwcml2YXRlIHN0YXRpYyByZXRyeUludGVydmFsID0gMTAwMFxuXG4gIHByaXZhdGUgYXBpT3JpZ2luOiBzdHJpbmdcbiAgcHJpdmF0ZSBjbGllbnRJZDogc3RyaW5nXG4gIHByaXZhdGUgcmV0cnk6IG51bWJlclxuICBwcml2YXRlIGNsaWVudFNlY3JldD86IHN0cmluZ1xuICBwcml2YXRlIGJhc2VSZXF1ZXN0OiA8VD4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zLFxuICApID0+IFByb21pc2U8VD5cbiAgcHJpdmF0ZSBsb2NhbENyZWRlbnRpYWxzOiBMb2NhbENyZWRlbnRpYWxzXG4gIHByaXZhdGUgc3RvcmFnZTogU2ltcGxlU3RvcmFnZVxuICBwcml2YXRlIGRldmljZUlEPzogc3RyaW5nXG4gIHByaXZhdGUgdG9rZW5JblVSTD86IGJvb2xlYW5cbiAgcHJpdmF0ZSByZWZyZXNoVG9rZW5GdW5jOiAocmVmcmVzaFRva2VuPzogc3RyaW5nLCBjcmVkZW50aWFscz86IENyZWRlbnRpYWxzKSA9PiBQcm9taXNlPENyZWRlbnRpYWxzPlxuICBwcml2YXRlIGhlYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XG4gIHByaXZhdGUgc2luZ2xlUHJvbWlzZTogU2luZ2xlUHJvbWlzZSA9IG5ldyBTaW5nbGVQcm9taXNlKClcbiAgcHJpdmF0ZSBhbm9ueW1vdXNTaWduSW5GdW5jOiAoQ3JlZGVudGlhbHMpID0+IFByb21pc2U8Q3JlZGVudGlhbHMgfCB2b2lkPlxuXG4gIC8qKlxuICAgKiBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge09BdXRoMkNsaWVudE9wdGlvbnN9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9BdXRoMkNsaWVudE9wdGlvbnMpIHtcbiAgICB0aGlzLmFwaU9yaWdpbiA9IG9wdGlvbnMuYXBpT3JpZ2luXG4gICAgdGhpcy5jbGllbnRJZCA9IG9wdGlvbnMuY2xpZW50SWRcbiAgICB0aGlzLnJldHJ5ID0gdGhpcy5mb3JtYXRSZXRyeShvcHRpb25zLnJldHJ5LCBPQXV0aDJDbGllbnQuZGVmYXVsdFJldHJ5KVxuICAgIGlmIChvcHRpb25zLmJhc2VSZXF1ZXN0KSB7XG4gICAgICB0aGlzLmJhc2VSZXF1ZXN0ID0gb3B0aW9ucy5iYXNlUmVxdWVzdFxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJhc2VSZXF1ZXN0ID0gZGVmYXVsdFJlcXVlc3RcbiAgICB9XG4gICAgdGhpcy50b2tlbkluVVJMID0gb3B0aW9ucy50b2tlbkluVVJMXG4gICAgdGhpcy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMuc3RvcmFnZSA9IG9wdGlvbnMuc3RvcmFnZSB8fCBkZWZhdWx0U3RvcmFnZVxuICAgIHRoaXMubG9jYWxDcmVkZW50aWFscyA9IG5ldyBMb2NhbENyZWRlbnRpYWxzKHtcbiAgICAgIHRva2VuU2VjdGlvbk5hbWU6IGBjcmVkZW50aWFsc18ke29wdGlvbnMuY2xpZW50SWR9YCxcbiAgICAgIHN0b3JhZ2U6IHRoaXMuc3RvcmFnZSxcbiAgICB9KVxuICAgIHRoaXMuY2xpZW50U2VjcmV0ID0gb3B0aW9ucy5jbGllbnRTZWNyZXRcbiAgICB0aGlzLnJlZnJlc2hUb2tlbkZ1bmMgPSBvcHRpb25zLnJlZnJlc2hUb2tlbkZ1bmMgfHwgdGhpcy5kZWZhdWx0UmVmcmVzaFRva2VuRnVuY1xuICAgIHRoaXMuYW5vbnltb3VzU2lnbkluRnVuYyA9IG9wdGlvbnMuYW5vbnltb3VzU2lnbkluRnVuY1xuICB9XG5cbiAgLyoqXG4gICAqIHNldENyZWRlbnRpYWxzIFByb3ZpZGVzIGFuIGFsdGVybmF0aXZlIGZldGNoIGFwaSByZXF1ZXN0IGltcGxlbWVudGF0aW9uIHdpdGggYXV0aCBjcmVkZW50aWFsc1xuICAgKiBAcGFyYW0ge0NyZWRlbnRpYWxzfSBjcmVkZW50aWFsc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgcHVibGljIHNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbENyZWRlbnRpYWxzLnNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKVxuICB9XG5cbiAgLyoqXG4gICAqIGdldEFjY2Vzc1Rva2VuIHJldHVybiBhIHZhbGlkYXRlIGFjY2VzcyB0b2tlblxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEFjY2Vzc1Rva2VuKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5nZXRDcmVkZW50aWFscygpXG4gICAgaWYgKGNyZWRlbnRpYWxzPy5hY2Nlc3NfdG9rZW4pIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlZGVudGlhbHMuYWNjZXNzX3Rva2VuKVxuICAgIH1cbiAgICBjb25zdCByZXNwRXJyOiBSZXNwb25zZUVycm9yID0geyBlcnJvcjogRXJyb3JUeXBlLlVOQVVUSEVOVElDQVRFRCB9XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BFcnIpXG4gIH1cblxuICAvKipcbiAgICogcmVxdWVzdCBodHRwIGxpa2Ugc2ltcGxlIGZldGNoIGFwaSwgZXhwOnJlcXVlc3QoJy92MS91c2VyL21lJywge3dpdGhDcmVkZW50aWFsczp0cnVlfSlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcGFyYW0ge0F1dGhDbGllbnRSZXF1ZXN0T3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlcXVlc3Q8VD4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IEF1dGhDbGllbnRSZXF1ZXN0T3B0aW9ucyxcbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge31cbiAgICB9XG4gICAgY29uc3QgcmV0cnk6IG51bWJlciA9IHRoaXMuZm9ybWF0UmV0cnkob3B0aW9ucy5yZXRyeSwgdGhpcy5yZXRyeSlcbiAgICBvcHRpb25zLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwge31cbiAgICBpZiAodGhpcy5oZWFkZXJzKSB7XG4gICAgICBvcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgIC4uLnRoaXMuaGVhZGVycyxcbiAgICAgICAgLi4ub3B0aW9ucy5oZWFkZXJzLFxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVyc1tSZXF1ZXN0SWRIZWFkZXJOYW1lXSkge1xuICAgICAgb3B0aW9ucy5oZWFkZXJzW1JlcXVlc3RJZEhlYWRlck5hbWVdID0gZ2VuZXJhdGVSZXF1ZXN0SWQoKVxuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVyc1tEZXZpY2VJZEhlYWRlck5hbWVdKSB7XG4gICAgICBjb25zdCBkZXZpY2VJZCA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlSWQoKVxuICAgICAgb3B0aW9ucy5oZWFkZXJzW0RldmljZUlkSGVhZGVyTmFtZV0gPSBkZXZpY2VJZFxuICAgIH1cbiAgICBpZiAob3B0aW9ucz8ud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICBjb25zdCBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuZ2V0Q3JlZGVudGlhbHMoKVxuICAgICAgaWYgKGNyZWRlbnRpYWxzKSB7XG4gICAgICAgIGlmICh0aGlzLnRva2VuSW5VUkwpIHtcbiAgICAgICAgICBpZiAodXJsLmluZGV4T2YoJz8nKSA8IDApIHtcbiAgICAgICAgICAgIHVybCArPSAnPydcbiAgICAgICAgICB9XG4gICAgICAgICAgdXJsICs9IGBhY2Nlc3NfdG9rZW49JHtjcmVkZW50aWFscy5hY2Nlc3NfdG9rZW59YFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMuaGVhZGVycy5BdXRob3JpemF0aW9uID0gYCR7Y3JlZGVudGlhbHMudG9rZW5fdHlwZX0gJHtjcmVkZW50aWFscy5hY2Nlc3NfdG9rZW59YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmNsaWVudElkICYmIHVybC5pbmRleE9mKCdjbGllbnRfaWQnKSA8IDApIHtcbiAgICAgICAgdXJsICs9IHVybC5pbmRleE9mKCc/JykgPCAwID8gJz8nIDogJyYnXG4gICAgICAgIHVybCArPSBgY2xpZW50X2lkPSR7dGhpcy5jbGllbnRJZH1gXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICB1cmwgPSB0aGlzLmFwaU9yaWdpbiArIHVybFxuICAgIH1cbiAgICBsZXQgcmVzcG9uc2U6IFQgfCBudWxsID0gbnVsbFxuICAgIGNvbnN0IG1heFJlcXVlc3RUaW1lczogbnVtYmVyID0gcmV0cnkgKyAxXG4gICAgZm9yIChcbiAgICAgIGxldCByZXF1ZXN0VGltZSA9IDA7XG4gICAgICByZXF1ZXN0VGltZSA8IG1heFJlcXVlc3RUaW1lcztcbiAgICAgIHJlcXVlc3RUaW1lKytcbiAgICApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5iYXNlUmVxdWVzdDxUPih1cmwsIG9wdGlvbnMpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGNhdGNoIChyZXNwb25zZUVycm9yKSB7XG4gICAgICAgIGlmIChvcHRpb25zLndpdGhDcmVkZW50aWFscyAmJiByZXNwb25zZUVycm9yICYmIHJlc3BvbnNlRXJyb3IuZXJyb3IgPT09IEVycm9yVHlwZS5VTkFVVEhFTlRJQ0FURUQpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnNldENyZWRlbnRpYWxzKG51bGwpXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlRXJyb3IpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgcmVxdWVzdFRpbWUgPT09IHJldHJ5XG4gICAgICAgICAgfHwgIXJlc3BvbnNlRXJyb3JcbiAgICAgICAgICB8fCByZXNwb25zZUVycm9yLmVycm9yICE9PSAndW5yZWFjaGFibGUnXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwb25zZUVycm9yKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnNsZWVwKE9BdXRoMkNsaWVudC5yZXRyeUludGVydmFsKVxuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2VcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdldCBjcmVkZW50aWFscy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDcmVkZW50aWFscygpOiBQcm9taXNlPENyZWRlbnRpYWxzIHwgbnVsbD4ge1xuICAgIGxldCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuZ2V0Q3JlZGVudGlhbHMoKVxuICAgIGlmIChpc0NyZWRlbnRpYWxzRXhwaXJlZChjcmVkZW50aWFscykpIHtcbiAgICAgIGlmIChjcmVkZW50aWFscyAmJiBjcmVkZW50aWFscy5zY29wZSA9PT0gJ2Fub255bW91cycpIHtcbiAgICAgICAgaWYgKHRoaXMuYW5vbnltb3VzU2lnbkluRnVuYykge1xuICAgICAgICAgIGNvbnN0IGMgPSBhd2FpdCB0aGlzLmFub255bW91c1NpZ25JbkZ1bmMoY3JlZGVudGlhbHMpXG4gICAgICAgICAgY3JlZGVudGlhbHMgPSBjIHx8IGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmFub255bW91c1NpZ25JbihjcmVkZW50aWFscylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbihjcmVkZW50aWFscylcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQg5bqf5byD5o6l5Y+j77yM5Yu/55SoLiDlpoLpnIDojrflj5blh63or4Hkv6Hmga/or7fkvb/nlKggZ2V0Q3JlZGVudGlhbHMg5pa55rOVXG4gICAqL1xuICBwdWJsaWMgZ2V0Q3JlZGVudGlhbHNTeW5jKCk6IENyZWRlbnRpYWxzIHwgbnVsbCB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gdGhpcy5sb2NhbENyZWRlbnRpYWxzLmdldFN0b3JhZ2VDcmVkZW50aWFsc1N5bmMoKVxuICAgIHJldHVybiBjcmVkZW50aWFsc1xuICB9XG5cbiAgcHVibGljIGdldENyZWRlbnRpYWxzQXN5bmMoKTogUHJvbWlzZTxDcmVkZW50aWFscyB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDcmVkZW50aWFscygpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U2NvcGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuZ2V0Q3JlZGVudGlhbHMoKVxuICAgIGlmICghY3JlZGVudGlhbHMpIHtcbiAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKCdjcmVkZW50aWFscyBub3QgZm91bmQnKVxuICAgIH1cbiAgICByZXR1cm4gY3JlZGVudGlhbHMuc2NvcGVcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRHcm91cHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpXG4gICAgaWYgKCFjcmVkZW50aWFscykge1xuICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IoJ2NyZWRlbnRpYWxzIG5vdCBmb3VuZCcpXG4gICAgfVxuICAgIHJldHVybiBjcmVkZW50aWFscy5ncm91cHNcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIGV4cGlyZWQgdG9rZW4uXG4gICAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZnJlc2hUb2tlbihjcmVkZW50aWFsczogQ3JlZGVudGlhbHMpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuc2luZ2xlUHJvbWlzZS5ydW4oJ19yZWZyZXNoVG9rZW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIWNyZWRlbnRpYWxzIHx8ICFjcmVkZW50aWFscy5yZWZyZXNoX3Rva2VuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKCdubyByZWZyZXNoIHRva2VuIGZvdW5kIGluIGNyZWRlbnRpYWxzJylcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG5ld0NyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMucmVmcmVzaFRva2VuRnVuYyhjcmVkZW50aWFscy5yZWZyZXNoX3Rva2VuLCBjcmVkZW50aWFscylcbiAgICAgICAgYXdhaXQgdGhpcy5sb2NhbENyZWRlbnRpYWxzLnNldENyZWRlbnRpYWxzKG5ld0NyZWRlbnRpYWxzKVxuICAgICAgICByZXR1cm4gbmV3Q3JlZGVudGlhbHNcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5lcnJvciA9PT0gRXJyb3JUeXBlLklOVkFMSURfR1JBTlQpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuc2V0Q3JlZGVudGlhbHMobnVsbClcbiAgICAgICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcihlcnJvci5lcnJvcl9kZXNjcmlwdGlvbilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayByZXRyeSB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHJldHJ5XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIHByaXZhdGUgY2hlY2tSZXRyeShyZXRyeTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgcmVzcG9uc2VFcnJvcjogUmVzcG9uc2VFcnJvciB8IG51bGwgPSBudWxsXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHJldHJ5ICE9PSAnbnVtYmVyJ1xuICAgICAgfHwgcmV0cnkgPCBPQXV0aDJDbGllbnQubWluUmV0cnlcbiAgICAgIHx8IHJldHJ5ID4gT0F1dGgyQ2xpZW50Lm1heFJldHJ5XG4gICAgKSB7XG4gICAgICByZXNwb25zZUVycm9yID0ge1xuICAgICAgICBlcnJvcjogRXJyb3JUeXBlLlVOUkVBQ0hBQkxFLFxuICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogJ3dyb25nIG9wdGlvbnMgcGFyYW06IHJldHJ5JyxcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlc3BvbnNlRXJyb3IpIHtcbiAgICAgIHRocm93IHJlc3BvbnNlRXJyb3JcbiAgICB9XG4gICAgcmV0dXJuIHJldHJ5XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHJldHJ5IHZhbHVlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gcmV0cnlcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZmF1bHRWYWxlXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIHByaXZhdGUgZm9ybWF0UmV0cnkocmV0cnk6IG51bWJlciwgZGVmYXVsdFZhbGU6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHR5cGVvZiByZXRyeSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsZVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jaGVja1JldHJ5KHJldHJ5KVxuICB9XG5cbiAgLyoqXG4gICAqIFNsZWVwLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbXNcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSwgbXMpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBhbm9ueW1vdXMgc2lnbkluXG4gICAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBhbm9ueW1vdXNTaWduSW4oY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzKTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIHJldHVybiB0aGlzLnNpbmdsZVByb21pc2UucnVuKCdfYW5vbnltb3VzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFjcmVkZW50aWFscyB8fCBjcmVkZW50aWFscy5zY29wZSAhPT0gJ2Fub255bW91cycpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IoJ25vIGFub255bW91cyBpbiBjcmVkZW50aWFscycpXG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBuZXdDcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLnJlcXVlc3QoJy9hdXRoL3YxL3NpZ25pbi9hbm9ueW1vdXNseScsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBjbGllbnRfaWQ6IHRoaXMuY2xpZW50SWQsXG4gICAgICAgICAgICBjbGllbnRfc2VjcmV0OiB0aGlzLmNsaWVudFNlY3JldCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuc2V0Q3JlZGVudGlhbHMobmV3Q3JlZGVudGlhbHMpXG4gICAgICAgIHJldHVybiBuZXdDcmVkZW50aWFsc1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmVycm9yID09PSBFcnJvclR5cGUuSU5WQUxJRF9HUkFOVCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5zZXRDcmVkZW50aWFscyhudWxsKVxuICAgICAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKGVycm9yLmVycm9yX2Rlc2NyaXB0aW9uKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcilcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgcmVmcmVzaCB0b2tlbiBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZnJlc2hUb2tlblxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn1cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZGVmYXVsdFJlZnJlc2hUb2tlbkZ1bmMocmVmcmVzaFRva2VuPzogc3RyaW5nLCBjcmVkZW50aWFscz86IENyZWRlbnRpYWxzKTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIGlmIChyZWZyZXNoVG9rZW4gPT09IHVuZGVmaW5lZCB8fCByZWZyZXNoVG9rZW4gPT09ICcnKSB7XG4gICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcigncmVmcmVzaCB0b2tlbiBub3QgZm91bmQnKVxuICAgIH1cblxuICAgIGxldCB1cmw6IHN0cmluZyA9IEFwaVVybHMuQVVUSF9UT0tFTl9VUkxcblxuICAgIGlmIChjcmVkZW50aWFscz8udmVyc2lvbiA9PT0gJ3YyJykge1xuICAgICAgdXJsID0gQXBpVXJsc1YyLkFVVEhfVE9LRU5fVVJMXG4gICAgfVxuXG4gICAgY29uc3QgbmV3Q3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5yZXF1ZXN0KHVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7XG4gICAgICAgIGNsaWVudF9pZDogdGhpcy5jbGllbnRJZCxcbiAgICAgICAgY2xpZW50X3NlY3JldDogdGhpcy5jbGllbnRTZWNyZXQsXG4gICAgICAgIGdyYW50X3R5cGU6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICAgICAgcmVmcmVzaF90b2tlbjogcmVmcmVzaFRva2VuLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIHsgLi4ubmV3Q3JlZGVudGlhbHMsIHZlcnNpb246IGNyZWRlbnRpYWxzPy52ZXJzaW9uIHx8ICd2MScgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkZXZpY2VJZFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXREZXZpY2VJZCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICh0aGlzLmRldmljZUlEKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZXZpY2VJRFxuICAgIH1cbiAgICBsZXQgZGV2aWNlSWQ6IHN0cmluZyA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXRJdGVtKERldmljZUlkU2VjdGlvbk5hbWUsKVxuICAgIGlmICghKHR5cGVvZiBkZXZpY2VJZCA9PT0gJ3N0cmluZydcbiAgICAgICYmIGRldmljZUlkLmxlbmd0aCA+PSAxNlxuICAgICAgJiYgZGV2aWNlSWQubGVuZ3RoIDw9IDQ4KSkge1xuICAgICAgZGV2aWNlSWQgPSB1dWlkdjQoKVxuICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldEl0ZW0oRGV2aWNlSWRTZWN0aW9uTmFtZSwgZGV2aWNlSWQpXG4gICAgfVxuICAgIHRoaXMuZGV2aWNlSUQgPSBkZXZpY2VJZFxuICAgIHJldHVybiBkZXZpY2VJZFxuICB9XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB1bkF1dGhlbnRpY2F0ZWQgZXJyb3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlcnJcbiAgICogQHJldHVybiB7UHJvbWlzZTxUPn1cbiAgICovXG4gIHByaXZhdGUgdW5BdXRoZW50aWNhdGVkRXJyb3I8VD4oZXJyPzogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgcmVzcEVycjogUmVzcG9uc2VFcnJvciA9IHtcbiAgICAgIGVycm9yOiBFcnJvclR5cGUuVU5BVVRIRU5USUNBVEVELFxuICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGVycixcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BFcnIpXG4gIH1cbn1cbiJdfQ==