@cloudbase/oauth 0.1.1-alpha.1 → 0.1.1-alpha.11
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.
- package/.prettierrc.js +41 -0
- package/dist/app/index.d.ts +11 -8
- package/dist/app/index.js +7 -4
- package/dist/app/internal.js +0 -1
- package/dist/app/openuri.d.ts +2 -1
- package/dist/app/openuri.js +29 -21
- package/dist/app/request.d.ts +1 -1
- package/dist/app/request.js +8 -3
- package/dist/app/storage.js +0 -1
- package/dist/auth/consts.d.ts +6 -1
- package/dist/auth/consts.js +5 -1
- package/dist/auth/index.d.ts +35 -9
- package/dist/auth/index.js +86 -47
- package/dist/auth/models.d.ts +14 -2
- package/dist/auth/models.js +0 -2
- package/dist/captcha/index.d.ts +10 -9
- package/dist/captcha/index.js +69 -50
- package/dist/function/index.js +0 -1
- package/dist/index.js +0 -1
- package/dist/oauthclient/consts.js +0 -1
- package/dist/oauthclient/index.d.ts +4 -4
- package/dist/oauthclient/index.js +0 -1
- package/dist/oauthclient/interface.d.ts +1 -1
- package/dist/oauthclient/interface.js +0 -1
- package/dist/oauthclient/models.js +0 -1
- package/dist/oauthclient/oauthclient.js +3 -3
- package/dist/package.json +1 -1
- package/dist/utils/base64.d.ts +4 -0
- package/dist/utils/base64.js +93 -0
- package/dist/utils/mp.d.ts +2 -0
- package/dist/utils/mp.js +64 -0
- package/dist/utils/promise.js +0 -1
- package/dist/utils/uuid.js +0 -1
- package/package.json +1 -1
- package/packages/analytics/dist/cjs/index.d.ts +2 -0
- package/packages/analytics/dist/cjs/index.js +144 -0
- package/packages/analytics/dist/esm/index.d.ts +2 -0
- package/packages/analytics/dist/esm/index.js +140 -0
- package/packages/app/dist/cjs/constants/common.d.ts +24 -0
- package/packages/app/dist/cjs/constants/common.js +68 -0
- package/packages/app/dist/cjs/index.d.ts +4 -0
- package/packages/app/dist/cjs/index.js +248 -0
- package/packages/app/dist/cjs/libs/adapter.d.ts +2 -0
- package/packages/app/dist/cjs/libs/adapter.js +5 -0
- package/packages/app/dist/cjs/libs/cache.d.ts +6 -0
- package/packages/app/dist/cjs/libs/cache.js +38 -0
- package/packages/app/dist/cjs/libs/component.d.ts +3 -0
- package/packages/app/dist/cjs/libs/component.js +126 -0
- package/packages/app/dist/cjs/libs/request.d.ts +28 -0
- package/packages/app/dist/cjs/libs/request.js +297 -0
- package/packages/app/dist/esm/constants/common.d.ts +24 -0
- package/packages/app/dist/esm/constants/common.js +57 -0
- package/packages/app/dist/esm/index.d.ts +4 -0
- package/packages/app/dist/esm/index.js +241 -0
- package/packages/app/dist/esm/libs/adapter.d.ts +2 -0
- package/packages/app/dist/esm/libs/adapter.js +2 -0
- package/packages/app/dist/esm/libs/cache.d.ts +6 -0
- package/packages/app/dist/esm/libs/cache.js +32 -0
- package/packages/app/dist/esm/libs/component.d.ts +3 -0
- package/packages/app/dist/esm/libs/component.js +121 -0
- package/packages/app/dist/esm/libs/request.d.ts +28 -0
- package/packages/app/dist/esm/libs/request.js +292 -0
- package/packages/auth/dist/cjs/index.d.ts +114 -0
- package/packages/auth/dist/cjs/index.js +1030 -0
- package/packages/auth/dist/esm/index.d.ts +114 -0
- package/packages/auth/dist/esm/index.js +1026 -0
- package/packages/cloudbase/analytics/dist/index.d.ts +2 -0
- package/packages/cloudbase/analytics/dist/index.esm.js +4 -0
- package/packages/cloudbase/analytics/dist/index.js +9 -0
- package/packages/cloudbase/app/dist/index.d.ts +9 -0
- package/packages/cloudbase/app/dist/index.esm.js +10 -0
- package/packages/cloudbase/app/dist/index.js +17 -0
- package/packages/cloudbase/auth/dist/index.d.ts +2 -0
- package/packages/cloudbase/auth/dist/index.esm.js +4 -0
- package/packages/cloudbase/auth/dist/index.js +9 -0
- package/packages/cloudbase/container/dist/index.d.ts +2 -0
- package/packages/cloudbase/container/dist/index.esm.js +4 -0
- package/packages/cloudbase/container/dist/index.js +9 -0
- package/packages/cloudbase/dist/index.cjs.js +31 -0
- package/packages/cloudbase/dist/index.esm.js +26 -0
- package/packages/cloudbase/functions/dist/index.d.ts +2 -0
- package/packages/cloudbase/functions/dist/index.esm.js +4 -0
- package/packages/cloudbase/functions/dist/index.js +9 -0
- package/packages/cloudbase/oauth/dist/index.d.ts +1 -0
- package/packages/cloudbase/oauth/dist/index.esm.js +3 -0
- package/packages/cloudbase/oauth/dist/index.js +21 -0
- package/packages/cloudbase/realtime/dist/index.d.ts +2 -0
- package/packages/cloudbase/realtime/dist/index.esm.js +4 -0
- package/packages/cloudbase/realtime/dist/index.js +9 -0
- package/packages/cloudbase/src/dist/oauth/src/index.d.ts +1 -0
- package/packages/cloudbase/src/dist/src/index.d.ts +9 -0
- package/packages/cloudbase/storage/dist/index.d.ts +2 -0
- package/packages/cloudbase/storage/dist/index.esm.js +4 -0
- package/packages/cloudbase/storage/dist/index.js +9 -0
- package/packages/container/dist/cjs/constants/index.d.ts +1 -0
- package/packages/container/dist/cjs/constants/index.js +5 -0
- package/packages/container/dist/cjs/go_wams_exec.d.ts +2 -0
- package/packages/container/dist/cjs/go_wams_exec.js +538 -0
- package/packages/container/dist/cjs/index.d.ts +11 -0
- package/packages/container/dist/cjs/index.js +333 -0
- package/packages/container/dist/cjs/utils/index.d.ts +3 -0
- package/packages/container/dist/cjs/utils/index.js +83 -0
- package/packages/container/dist/cjs/utils/loader.d.ts +8 -0
- package/packages/container/dist/cjs/utils/loader.js +186 -0
- package/packages/container/dist/cjs/utils/request.d.ts +12 -0
- package/packages/container/dist/cjs/utils/request.js +105 -0
- package/packages/container/dist/esm/constants/index.d.ts +1 -0
- package/packages/container/dist/esm/constants/index.js +2 -0
- package/packages/container/dist/esm/go_wams_exec.d.ts +2 -0
- package/packages/container/dist/esm/go_wams_exec.js +536 -0
- package/packages/container/dist/esm/index.d.ts +11 -0
- package/packages/container/dist/esm/index.js +329 -0
- package/packages/container/dist/esm/utils/index.d.ts +3 -0
- package/packages/container/dist/esm/utils/index.js +77 -0
- package/packages/container/dist/esm/utils/loader.d.ts +8 -0
- package/packages/container/dist/esm/utils/loader.js +178 -0
- package/packages/container/dist/esm/utils/request.d.ts +12 -0
- package/packages/container/dist/esm/utils/request.js +101 -0
- package/packages/container/dist/miniprogram/index.js +1 -0
- package/packages/container/node_modules/@cloudbase/types/LICENSE +202 -0
- package/packages/container/node_modules/@cloudbase/types/auth.d.ts +78 -0
- package/packages/container/node_modules/@cloudbase/types/cache.d.ts +26 -0
- package/packages/container/node_modules/@cloudbase/types/component.d.ts +17 -0
- package/packages/container/node_modules/@cloudbase/types/database.d.ts +31 -0
- package/packages/container/node_modules/@cloudbase/types/events.d.ts +13 -0
- package/packages/container/node_modules/@cloudbase/types/functions.d.ts +16 -0
- package/packages/container/node_modules/@cloudbase/types/index.d.ts +66 -0
- package/packages/container/node_modules/@cloudbase/types/index.js +1 -0
- package/packages/container/node_modules/@cloudbase/types/package.json +46 -0
- package/packages/container/node_modules/@cloudbase/types/realtime.d.ts +350 -0
- package/packages/container/node_modules/@cloudbase/types/request.d.ts +28 -0
- package/packages/container/node_modules/@cloudbase/types/storage.d.ts +97 -0
- package/packages/container/node_modules/@cloudbase/utilities/.eslintignore +2 -0
- package/packages/container/node_modules/@cloudbase/utilities/.eslintrc.js +15 -0
- package/packages/container/node_modules/@cloudbase/utilities/LICENSE +202 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/adapters/index.d.ts +13 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/adapters/index.js +55 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/adapters/platforms/web.d.ts +15 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/adapters/platforms/web.js +215 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/constants/common.d.ts +6 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/constants/common.js +24 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/constants/errors.d.ts +8 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/constants/errors.js +12 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/constants/index.d.ts +3 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/constants/index.js +21 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/helpers/decorators.d.ts +11 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/helpers/decorators.js +238 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/helpers/index.d.ts +1 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/helpers/index.js +18 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/index.d.ts +11 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/index.js +47 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/libs/cache.d.ts +17 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/libs/cache.js +261 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/libs/events.d.ts +27 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/libs/events.js +108 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/libs/util.d.ts +35 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/cjs/libs/util.js +223 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/esm/adapters/index.d.ts +13 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/esm/adapters/index.js +27 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/esm/adapters/platforms/web.d.ts +15 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/esm/adapters/platforms/web.js +211 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/esm/constants/common.d.ts +6 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/esm/constants/common.js +17 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/esm/constants/errors.d.ts +8 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/esm/constants/errors.js +9 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/esm/constants/index.d.ts +3 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/esm/constants/index.js +4 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/esm/helpers/decorators.d.ts +11 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/esm/helpers/decorators.js +234 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/esm/helpers/index.d.ts +1 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/esm/helpers/index.js +2 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/esm/index.d.ts +11 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/esm/index.js +12 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/esm/libs/cache.d.ts +17 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/esm/libs/cache.js +258 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/esm/libs/events.d.ts +27 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/esm/libs/events.js +102 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/esm/libs/util.d.ts +35 -0
- package/packages/container/node_modules/@cloudbase/utilities/dist/esm/libs/util.js +194 -0
- package/packages/container/node_modules/@cloudbase/utilities/package.json +32 -0
- package/packages/container/node_modules/@cloudbase/utilities/src/adapters/index.ts +28 -0
- package/packages/container/node_modules/@cloudbase/utilities/src/adapters/platforms/web.ts +182 -0
- package/packages/container/node_modules/@cloudbase/utilities/src/constants/common.ts +21 -0
- package/packages/container/node_modules/@cloudbase/utilities/src/constants/errors.ts +8 -0
- package/packages/container/node_modules/@cloudbase/utilities/src/constants/index.ts +4 -0
- package/packages/container/node_modules/@cloudbase/utilities/src/global.d.ts +3 -0
- package/packages/container/node_modules/@cloudbase/utilities/src/helpers/decorators.ts +228 -0
- package/packages/container/node_modules/@cloudbase/utilities/src/helpers/index.ts +1 -0
- package/packages/container/node_modules/@cloudbase/utilities/src/index.ts +22 -0
- package/packages/container/node_modules/@cloudbase/utilities/src/libs/cache.ts +192 -0
- package/packages/container/node_modules/@cloudbase/utilities/src/libs/events.ts +154 -0
- package/packages/container/node_modules/@cloudbase/utilities/src/libs/util.ts +216 -0
- package/packages/container/node_modules/@cloudbase/utilities/tsconfig.esm.json +16 -0
- package/packages/container/node_modules/@cloudbase/utilities/tsconfig.json +21 -0
- package/packages/container/node_modules/crypto-js/CONTRIBUTING.md +28 -0
- package/packages/container/node_modules/crypto-js/LICENSE +24 -0
- package/packages/container/node_modules/crypto-js/README.md +261 -0
- package/packages/container/node_modules/crypto-js/aes.js +234 -0
- package/packages/container/node_modules/crypto-js/bower.json +39 -0
- package/packages/container/node_modules/crypto-js/cipher-core.js +890 -0
- package/packages/container/node_modules/crypto-js/core.js +807 -0
- package/packages/container/node_modules/crypto-js/crypto-js.js +6191 -0
- package/packages/container/node_modules/crypto-js/docs/QuickStartGuide.wiki +470 -0
- package/packages/container/node_modules/crypto-js/enc-base64.js +136 -0
- package/packages/container/node_modules/crypto-js/enc-base64url.js +140 -0
- package/packages/container/node_modules/crypto-js/enc-hex.js +18 -0
- package/packages/container/node_modules/crypto-js/enc-latin1.js +18 -0
- package/packages/container/node_modules/crypto-js/enc-utf16.js +149 -0
- package/packages/container/node_modules/crypto-js/enc-utf8.js +18 -0
- package/packages/container/node_modules/crypto-js/evpkdf.js +134 -0
- package/packages/container/node_modules/crypto-js/format-hex.js +66 -0
- package/packages/container/node_modules/crypto-js/format-openssl.js +18 -0
- package/packages/container/node_modules/crypto-js/hmac-md5.js +18 -0
- package/packages/container/node_modules/crypto-js/hmac-ripemd160.js +18 -0
- package/packages/container/node_modules/crypto-js/hmac-sha1.js +18 -0
- package/packages/container/node_modules/crypto-js/hmac-sha224.js +18 -0
- package/packages/container/node_modules/crypto-js/hmac-sha256.js +18 -0
- package/packages/container/node_modules/crypto-js/hmac-sha3.js +18 -0
- package/packages/container/node_modules/crypto-js/hmac-sha384.js +18 -0
- package/packages/container/node_modules/crypto-js/hmac-sha512.js +18 -0
- package/packages/container/node_modules/crypto-js/hmac.js +143 -0
- package/packages/container/node_modules/crypto-js/index.js +18 -0
- package/packages/container/node_modules/crypto-js/lib-typedarrays.js +76 -0
- package/packages/container/node_modules/crypto-js/md5.js +268 -0
- package/packages/container/node_modules/crypto-js/mode-cfb.js +80 -0
- package/packages/container/node_modules/crypto-js/mode-ctr-gladman.js +116 -0
- package/packages/container/node_modules/crypto-js/mode-ctr.js +58 -0
- package/packages/container/node_modules/crypto-js/mode-ecb.js +40 -0
- package/packages/container/node_modules/crypto-js/mode-ofb.js +54 -0
- package/packages/container/node_modules/crypto-js/package.json +42 -0
- package/packages/container/node_modules/crypto-js/pad-ansix923.js +49 -0
- package/packages/container/node_modules/crypto-js/pad-iso10126.js +44 -0
- package/packages/container/node_modules/crypto-js/pad-iso97971.js +40 -0
- package/packages/container/node_modules/crypto-js/pad-nopadding.js +30 -0
- package/packages/container/node_modules/crypto-js/pad-pkcs7.js +18 -0
- package/packages/container/node_modules/crypto-js/pad-zeropadding.js +47 -0
- package/packages/container/node_modules/crypto-js/pbkdf2.js +145 -0
- package/packages/container/node_modules/crypto-js/rabbit-legacy.js +190 -0
- package/packages/container/node_modules/crypto-js/rabbit.js +192 -0
- package/packages/container/node_modules/crypto-js/rc4.js +139 -0
- package/packages/container/node_modules/crypto-js/ripemd160.js +267 -0
- package/packages/container/node_modules/crypto-js/sha1.js +150 -0
- package/packages/container/node_modules/crypto-js/sha224.js +80 -0
- package/packages/container/node_modules/crypto-js/sha256.js +199 -0
- package/packages/container/node_modules/crypto-js/sha3.js +326 -0
- package/packages/container/node_modules/crypto-js/sha384.js +83 -0
- package/packages/container/node_modules/crypto-js/sha512.js +326 -0
- package/packages/container/node_modules/crypto-js/tripledes.js +779 -0
- package/packages/container/node_modules/crypto-js/x64-core.js +304 -0
- package/packages/functions/dist/cjs/index.d.ts +2 -0
- package/packages/functions/dist/cjs/index.js +165 -0
- package/packages/functions/dist/esm/index.d.ts +2 -0
- package/packages/functions/dist/esm/index.js +161 -0
- package/packages/oauth/dist/cjs/auth/apis.d.ts +95 -0
- package/packages/oauth/dist/cjs/auth/apis.js +745 -0
- package/packages/oauth/dist/cjs/auth/consts.d.ts +67 -0
- package/packages/oauth/dist/cjs/auth/consts.js +75 -0
- package/packages/oauth/dist/cjs/auth/models.d.ts +378 -0
- package/packages/oauth/dist/cjs/auth/models.js +3 -0
- package/packages/oauth/dist/cjs/captcha/captcha.d.ts +35 -0
- package/packages/oauth/dist/cjs/captcha/captcha.js +288 -0
- package/packages/oauth/dist/cjs/index.d.ts +14 -0
- package/packages/oauth/dist/cjs/index.js +70 -0
- package/packages/oauth/dist/cjs/oauth2client/consts.d.ts +67 -0
- package/packages/oauth/dist/cjs/oauth2client/consts.js +73 -0
- package/packages/oauth/dist/cjs/oauth2client/interface.d.ts +15 -0
- package/packages/oauth/dist/cjs/oauth2client/interface.js +10 -0
- package/packages/oauth/dist/cjs/oauth2client/models.d.ts +50 -0
- package/packages/oauth/dist/cjs/oauth2client/models.js +3 -0
- package/packages/oauth/dist/cjs/oauth2client/oauth2client.d.ts +58 -0
- package/packages/oauth/dist/cjs/oauth2client/oauth2client.js +687 -0
- package/packages/oauth/dist/cjs/utils/encrypt.d.ts +4 -0
- package/packages/oauth/dist/cjs/utils/encrypt.js +25 -0
- package/packages/oauth/dist/cjs/utils/encryptlong/index.d.ts +154 -0
- package/packages/oauth/dist/cjs/utils/encryptlong/index.js +4029 -0
- package/packages/oauth/dist/cjs/utils/function/single-promise.d.ts +5 -0
- package/packages/oauth/dist/cjs/utils/function/single-promise.js +96 -0
- package/packages/oauth/dist/cjs/utils/index.d.ts +1 -0
- package/packages/oauth/dist/cjs/utils/index.js +49 -0
- package/packages/oauth/dist/cjs/utils/mp.d.ts +2 -0
- package/packages/oauth/dist/cjs/utils/mp.js +58 -0
- package/packages/oauth/dist/cjs/utils/uuid.d.ts +1 -0
- package/packages/oauth/dist/cjs/utils/uuid.js +12 -0
- package/packages/oauth/dist/esm/auth/apis.d.ts +95 -0
- package/packages/oauth/dist/esm/auth/apis.js +743 -0
- package/packages/oauth/dist/esm/auth/consts.d.ts +67 -0
- package/packages/oauth/dist/esm/auth/consts.js +72 -0
- package/packages/oauth/dist/esm/auth/models.d.ts +378 -0
- package/packages/oauth/dist/esm/auth/models.js +2 -0
- package/packages/oauth/dist/esm/captcha/captcha.d.ts +35 -0
- package/packages/oauth/dist/esm/captcha/captcha.js +285 -0
- package/packages/oauth/dist/esm/index.d.ts +14 -0
- package/packages/oauth/dist/esm/index.js +35 -0
- package/packages/oauth/dist/esm/oauth2client/consts.d.ts +67 -0
- package/packages/oauth/dist/esm/oauth2client/consts.js +70 -0
- package/packages/oauth/dist/esm/oauth2client/interface.d.ts +15 -0
- package/packages/oauth/dist/esm/oauth2client/interface.js +7 -0
- package/packages/oauth/dist/esm/oauth2client/models.d.ts +50 -0
- package/packages/oauth/dist/esm/oauth2client/models.js +2 -0
- package/packages/oauth/dist/esm/oauth2client/oauth2client.d.ts +58 -0
- package/packages/oauth/dist/esm/oauth2client/oauth2client.js +681 -0
- package/packages/oauth/dist/esm/utils/encrypt.d.ts +4 -0
- package/packages/oauth/dist/esm/utils/encrypt.js +18 -0
- package/packages/oauth/dist/esm/utils/encryptlong/index.d.ts +154 -0
- package/packages/oauth/dist/esm/utils/encryptlong/index.js +4027 -0
- package/packages/oauth/dist/esm/utils/function/single-promise.d.ts +5 -0
- package/packages/oauth/dist/esm/utils/function/single-promise.js +93 -0
- package/packages/oauth/dist/esm/utils/index.d.ts +1 -0
- package/packages/oauth/dist/esm/utils/index.js +45 -0
- package/packages/oauth/dist/esm/utils/mp.d.ts +2 -0
- package/packages/oauth/dist/esm/utils/mp.js +53 -0
- package/packages/oauth/dist/esm/utils/uuid.d.ts +1 -0
- package/packages/oauth/dist/esm/utils/uuid.js +8 -0
- package/packages/packages/cloudbase/src/dist/oauth/src/index.d.ts +1 -0
- package/packages/packages/cloudbase/src/dist/src/index.d.ts +9 -0
- package/packages/realtime/dist/cjs/common.d.ts +4 -0
- package/packages/realtime/dist/cjs/common.js +22 -0
- package/packages/realtime/dist/cjs/error.d.ts +36 -0
- package/packages/realtime/dist/cjs/error.js +106 -0
- package/packages/realtime/dist/cjs/index.d.ts +2 -0
- package/packages/realtime/dist/cjs/index.js +36 -0
- package/packages/realtime/dist/cjs/listener.d.ts +14 -0
- package/packages/realtime/dist/cjs/listener.js +18 -0
- package/packages/realtime/dist/cjs/message.d.ts +3 -0
- package/packages/realtime/dist/cjs/message.js +13 -0
- package/packages/realtime/dist/cjs/snapshot.d.ts +17 -0
- package/packages/realtime/dist/cjs/snapshot.js +45 -0
- package/packages/realtime/dist/cjs/utils.d.ts +1 -0
- package/packages/realtime/dist/cjs/utils.js +9 -0
- package/packages/realtime/dist/cjs/virtual-websocket-client.d.ts +62 -0
- package/packages/realtime/dist/cjs/websocket-client.d.ts +78 -0
- package/packages/realtime/dist/cjs/ws-event.d.ts +126 -0
- package/packages/realtime/dist/cjs/ws-event.js +141 -0
- package/packages/realtime/dist/esm/common.d.ts +4 -0
- package/packages/realtime/dist/esm/common.js +15 -0
- package/packages/realtime/dist/esm/error.d.ts +36 -0
- package/packages/realtime/dist/esm/error.js +100 -0
- package/packages/realtime/dist/esm/index.d.ts +2 -0
- package/packages/realtime/dist/esm/index.js +32 -0
- package/packages/realtime/dist/esm/listener.d.ts +14 -0
- package/packages/realtime/dist/esm/listener.js +15 -0
- package/packages/realtime/dist/esm/message.d.ts +3 -0
- package/packages/realtime/dist/esm/message.js +8 -0
- package/packages/realtime/dist/esm/snapshot.d.ts +17 -0
- package/packages/realtime/dist/esm/snapshot.js +42 -0
- package/packages/realtime/dist/esm/utils.d.ts +1 -0
- package/packages/realtime/dist/esm/utils.js +5 -0
- package/packages/realtime/dist/esm/virtual-websocket-client.d.ts +62 -0
- package/packages/realtime/dist/esm/websocket-client.d.ts +78 -0
- package/packages/realtime/dist/esm/ws-event.d.ts +126 -0
- package/packages/realtime/dist/esm/ws-event.js +137 -0
- package/packages/src/dist/oauth/src/index.d.ts +1 -0
- package/packages/src/dist/src/index.d.ts +9 -0
- package/packages/storage/dist/cjs/index.d.ts +2 -0
- package/packages/storage/dist/cjs/index.js +426 -0
- package/packages/storage/dist/esm/index.d.ts +2 -0
- package/packages/storage/dist/esm/index.js +422 -0
- package/packages/utilities/dist/cjs/adapters/index.d.ts +13 -0
- package/packages/utilities/dist/cjs/adapters/index.js +55 -0
- package/packages/utilities/dist/cjs/adapters/platforms/web.d.ts +15 -0
- package/packages/utilities/dist/cjs/adapters/platforms/web.js +215 -0
- package/packages/utilities/dist/cjs/constants/common.d.ts +6 -0
- package/packages/utilities/dist/cjs/constants/common.js +24 -0
- package/packages/utilities/dist/cjs/constants/errors.d.ts +8 -0
- package/packages/utilities/dist/cjs/constants/errors.js +12 -0
- package/packages/utilities/dist/cjs/constants/index.d.ts +3 -0
- package/packages/utilities/dist/cjs/constants/index.js +21 -0
- package/packages/utilities/dist/cjs/helpers/decorators.d.ts +11 -0
- package/packages/utilities/dist/cjs/helpers/decorators.js +238 -0
- package/packages/utilities/dist/cjs/helpers/index.d.ts +1 -0
- package/packages/utilities/dist/cjs/helpers/index.js +18 -0
- package/packages/utilities/dist/cjs/index.d.ts +11 -0
- package/packages/utilities/dist/cjs/index.js +47 -0
- package/packages/utilities/dist/cjs/libs/cache.d.ts +17 -0
- package/packages/utilities/dist/cjs/libs/cache.js +261 -0
- package/packages/utilities/dist/cjs/libs/events.d.ts +27 -0
- package/packages/utilities/dist/cjs/libs/events.js +108 -0
- package/packages/utilities/dist/cjs/libs/util.d.ts +34 -0
- package/packages/utilities/dist/cjs/libs/util.js +198 -0
- package/packages/utilities/dist/esm/adapters/index.d.ts +13 -0
- package/packages/utilities/dist/esm/adapters/index.js +27 -0
- package/packages/utilities/dist/esm/adapters/platforms/web.d.ts +15 -0
- package/packages/utilities/dist/esm/adapters/platforms/web.js +211 -0
- package/packages/utilities/dist/esm/constants/common.d.ts +6 -0
- package/packages/utilities/dist/esm/constants/common.js +17 -0
- package/packages/utilities/dist/esm/constants/errors.d.ts +8 -0
- package/packages/utilities/dist/esm/constants/errors.js +9 -0
- package/packages/utilities/dist/esm/constants/index.d.ts +3 -0
- package/packages/utilities/dist/esm/constants/index.js +4 -0
- package/packages/utilities/dist/esm/helpers/decorators.d.ts +11 -0
- package/packages/utilities/dist/esm/helpers/decorators.js +234 -0
- package/packages/utilities/dist/esm/helpers/index.d.ts +1 -0
- package/packages/utilities/dist/esm/helpers/index.js +2 -0
- package/packages/utilities/dist/esm/index.d.ts +11 -0
- package/packages/utilities/dist/esm/index.js +12 -0
- package/packages/utilities/dist/esm/libs/cache.d.ts +17 -0
- package/packages/utilities/dist/esm/libs/cache.js +258 -0
- package/packages/utilities/dist/esm/libs/events.d.ts +27 -0
- package/packages/utilities/dist/esm/libs/events.js +102 -0
- package/packages/utilities/dist/esm/libs/util.d.ts +34 -0
- package/packages/utilities/dist/esm/libs/util.js +173 -0
- package/src/app/index.ts +64 -64
- package/src/app/openuri.ts +106 -89
- package/src/app/request.ts +52 -50
- package/src/auth/consts.ts +69 -64
- package/src/auth/index.ts +180 -211
- package/src/auth/models.ts +17 -4
- package/src/captcha/index.ts +165 -138
- package/src/function/index.ts +1 -1
- package/src/oauthclient/oauthclient.ts +5 -4
- package/src/utils/base64.ts +115 -0
- package/src/utils/mp.ts +60 -0
- package/tsconfig.json +5 -18
- package/dist/app/index.js.map +0 -1
- package/dist/app/internal.js.map +0 -1
- package/dist/app/openuri.js.map +0 -1
- package/dist/app/request.js.map +0 -1
- package/dist/app/storage.js.map +0 -1
- package/dist/auth/consts.js.map +0 -1
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/models.js.map +0 -1
- package/dist/captcha/index.js.map +0 -1
- package/dist/function/index.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/oauthclient/consts.js.map +0 -1
- package/dist/oauthclient/index.js.map +0 -1
- package/dist/oauthclient/interface.js.map +0 -1
- package/dist/oauthclient/models.js.map +0 -1
- package/dist/oauthclient/oauthclient.js.map +0 -1
- package/dist/utils/promise.js.map +0 -1
- package/dist/utils/uuid.js.map +0 -1
|
@@ -0,0 +1,1030 @@
|
|
|
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.createCaptchaData = function (params) {
|
|
715
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
716
|
+
return __generator(this, function (_a) {
|
|
717
|
+
return [2, this.oauthInstance.authApi.createCaptchaData(params)];
|
|
718
|
+
});
|
|
719
|
+
});
|
|
720
|
+
};
|
|
721
|
+
Auth.prototype.varifyCaptchaData = function (params) {
|
|
722
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
723
|
+
return __generator(this, function (_a) {
|
|
724
|
+
return [2, this.oauthInstance.authApi.varifyCaptchaData(params)];
|
|
725
|
+
});
|
|
726
|
+
});
|
|
727
|
+
};
|
|
728
|
+
Auth.prototype.createLoginState = function (params) {
|
|
729
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
730
|
+
var loginState;
|
|
731
|
+
return __generator(this, function (_a) {
|
|
732
|
+
switch (_a.label) {
|
|
733
|
+
case 0:
|
|
734
|
+
loginState = new LoginState({
|
|
735
|
+
envId: this.config.env,
|
|
736
|
+
cache: this.cache,
|
|
737
|
+
oauthInstance: this.oauthInstance,
|
|
738
|
+
});
|
|
739
|
+
return [4, loginState.checkLocalStateAsync()];
|
|
740
|
+
case 1:
|
|
741
|
+
_a.sent();
|
|
742
|
+
return [4, loginState.user.refresh(params)];
|
|
743
|
+
case 2:
|
|
744
|
+
_a.sent();
|
|
745
|
+
eventBus.fire(EVENTS.LOGIN_STATE_CHANGED);
|
|
746
|
+
return [2, loginState];
|
|
747
|
+
}
|
|
748
|
+
});
|
|
749
|
+
});
|
|
750
|
+
};
|
|
751
|
+
__decorate([
|
|
752
|
+
catchErrorsDecorator({
|
|
753
|
+
title: '绑定手机号失败',
|
|
754
|
+
messages: [
|
|
755
|
+
'请确认以下各项:',
|
|
756
|
+
' 1 - 调用 auth().bindPhoneNumber() 的语法或参数是否正确',
|
|
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, "bindPhoneNumber", null);
|
|
765
|
+
__decorate([
|
|
766
|
+
catchErrorsDecorator({
|
|
767
|
+
title: '解除三方绑定失败',
|
|
768
|
+
messages: [
|
|
769
|
+
'请确认以下各项:',
|
|
770
|
+
' 1 - 调用 auth().unbindProvider() 的语法或参数是否正确',
|
|
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", Promise)
|
|
778
|
+
], Auth.prototype, "unbindProvider", null);
|
|
779
|
+
__decorate([
|
|
780
|
+
catchErrorsDecorator({
|
|
781
|
+
title: '绑定邮箱地址失败',
|
|
782
|
+
messages: [
|
|
783
|
+
'请确认以下各项:',
|
|
784
|
+
' 1 - 调用 auth().bindEmail() 的语法或参数是否正确',
|
|
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", void 0)
|
|
792
|
+
], Auth.prototype, "bindEmail", null);
|
|
793
|
+
__decorate([
|
|
794
|
+
catchErrorsDecorator({
|
|
795
|
+
title: '验证码验证失败',
|
|
796
|
+
messages: [
|
|
797
|
+
'请确认以下各项:',
|
|
798
|
+
' 1 - 调用 auth().verify() 的语法或参数是否正确',
|
|
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, "verify", null);
|
|
807
|
+
__decorate([
|
|
808
|
+
catchErrorsDecorator({
|
|
809
|
+
title: '获取验证码失败',
|
|
810
|
+
messages: [
|
|
811
|
+
'请确认以下各项:',
|
|
812
|
+
' 1 - 调用 auth().getVerification() 的语法或参数是否正确',
|
|
813
|
+
' 2 - 当前环境是否开通了手机验证码/邮箱登录',
|
|
814
|
+
"\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),
|
|
815
|
+
],
|
|
816
|
+
}),
|
|
817
|
+
__metadata("design:type", Function),
|
|
818
|
+
__metadata("design:paramtypes", [Object]),
|
|
819
|
+
__metadata("design:returntype", Promise)
|
|
820
|
+
], Auth.prototype, "getVerification", null);
|
|
821
|
+
__decorate([
|
|
822
|
+
catchErrorsDecorator({
|
|
823
|
+
title: '获取用户信息失败',
|
|
824
|
+
messages: [
|
|
825
|
+
'请确认以下各项:',
|
|
826
|
+
' 1 - 调用 auth().getCurrentUser() 的语法或参数是否正确',
|
|
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", []),
|
|
832
|
+
__metadata("design:returntype", Promise)
|
|
833
|
+
], Auth.prototype, "getCurrentUser", null);
|
|
834
|
+
__decorate([
|
|
835
|
+
catchErrorsDecorator({
|
|
836
|
+
title: '匿名登录失败',
|
|
837
|
+
messages: [
|
|
838
|
+
'请确认以下各项:',
|
|
839
|
+
' 1 - 当前环境是否开启了匿名登录',
|
|
840
|
+
' 2 - 调用 auth().signInAnonymously() 的语法或参数是否正确',
|
|
841
|
+
"\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),
|
|
842
|
+
],
|
|
843
|
+
}),
|
|
844
|
+
__metadata("design:type", Function),
|
|
845
|
+
__metadata("design:paramtypes", [Object]),
|
|
846
|
+
__metadata("design:returntype", Promise)
|
|
847
|
+
], Auth.prototype, "signInAnonymously", null);
|
|
848
|
+
__decorate([
|
|
849
|
+
catchErrorsDecorator({
|
|
850
|
+
title: '自定义登录失败',
|
|
851
|
+
messages: [
|
|
852
|
+
'请确认以下各项:',
|
|
853
|
+
' 1 - 当前环境是否开启了自定义登录',
|
|
854
|
+
' 2 - 调用 auth().signInWithCustomTicket() 的语法或参数是否正确',
|
|
855
|
+
' 3 - ticket 是否归属于当前环境',
|
|
856
|
+
' 4 - 创建 ticket 的自定义登录私钥是否过期',
|
|
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, "signInWithCustomTicket", null);
|
|
864
|
+
__decorate([
|
|
865
|
+
catchErrorsDecorator({
|
|
866
|
+
title: '注册失败',
|
|
867
|
+
messages: [
|
|
868
|
+
'请确认以下各项:',
|
|
869
|
+
' 1 - 当前环境是否开启了指定登录方式',
|
|
870
|
+
' 2 - 调用 auth().signUp() 的语法或参数是否正确',
|
|
871
|
+
"\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),
|
|
872
|
+
],
|
|
873
|
+
}),
|
|
874
|
+
__metadata("design:type", Function),
|
|
875
|
+
__metadata("design:paramtypes", [Object]),
|
|
876
|
+
__metadata("design:returntype", Promise)
|
|
877
|
+
], Auth.prototype, "signUp", null);
|
|
878
|
+
__decorate([
|
|
879
|
+
catchErrorsDecorator({
|
|
880
|
+
title: '获取用户是否被占用失败',
|
|
881
|
+
messages: [
|
|
882
|
+
'请确认以下各项:',
|
|
883
|
+
' 1 - 调用 auth().isUsernameRegistered() 的语法或参数是否正确',
|
|
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", [String]),
|
|
889
|
+
__metadata("design:returntype", Promise)
|
|
890
|
+
], Auth.prototype, "isUsernameRegistered", null);
|
|
891
|
+
__decorate([
|
|
892
|
+
catchErrorsDecorator({
|
|
893
|
+
title: '用户登出失败',
|
|
894
|
+
messages: [
|
|
895
|
+
'请确认以下各项:',
|
|
896
|
+
' 1 - 调用 auth().signOut() 的语法或参数是否正确',
|
|
897
|
+
' 2 - 当前用户是否为匿名登录(匿名登录不支持signOut)',
|
|
898
|
+
"\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),
|
|
899
|
+
],
|
|
900
|
+
}),
|
|
901
|
+
__metadata("design:type", Function),
|
|
902
|
+
__metadata("design:paramtypes", []),
|
|
903
|
+
__metadata("design:returntype", Promise)
|
|
904
|
+
], Auth.prototype, "signOut", null);
|
|
905
|
+
__decorate([
|
|
906
|
+
catchErrorsDecorator({
|
|
907
|
+
title: '获取本地登录态失败',
|
|
908
|
+
messages: [
|
|
909
|
+
'请确认以下各项:',
|
|
910
|
+
' 1 - 调用 auth().getLoginState() 的语法或参数是否正确',
|
|
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", []),
|
|
916
|
+
__metadata("design:returntype", Promise)
|
|
917
|
+
], Auth.prototype, "getLoginState", null);
|
|
918
|
+
__decorate([
|
|
919
|
+
catchErrorsDecorator({
|
|
920
|
+
title: '获取用户信息失败',
|
|
921
|
+
messages: [
|
|
922
|
+
'请确认以下各项:',
|
|
923
|
+
' 1 - 是否已登录',
|
|
924
|
+
' 2 - 调用 auth().getUserInfo() 的语法或参数是否正确',
|
|
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", [Object]),
|
|
930
|
+
__metadata("design:returntype", Promise)
|
|
931
|
+
], Auth.prototype, "getUserInfo", null);
|
|
932
|
+
__decorate([
|
|
933
|
+
catchErrorsDecorator({
|
|
934
|
+
title: '获取微搭插件用户信息失败',
|
|
935
|
+
messages: [
|
|
936
|
+
'请确认以下各项:',
|
|
937
|
+
' 1 - 是否已登录',
|
|
938
|
+
' 2 - 调用 auth().getWedaUserInfo() 的语法或参数是否正确',
|
|
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", []),
|
|
944
|
+
__metadata("design:returntype", Promise)
|
|
945
|
+
], Auth.prototype, "getWedaUserInfo", null);
|
|
946
|
+
__decorate([
|
|
947
|
+
catchErrorsDecorator({
|
|
948
|
+
title: '绑定第三方登录方式失败',
|
|
949
|
+
messages: [
|
|
950
|
+
'请确认以下各项:',
|
|
951
|
+
' 1 - 调用 auth().bindWithProvider() 的语法或参数是否正确',
|
|
952
|
+
' 2 - 此账户是否已经绑定此第三方',
|
|
953
|
+
"\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),
|
|
954
|
+
],
|
|
955
|
+
}),
|
|
956
|
+
__metadata("design:type", Function),
|
|
957
|
+
__metadata("design:paramtypes", [Object]),
|
|
958
|
+
__metadata("design:returntype", Promise)
|
|
959
|
+
], Auth.prototype, "bindWithProvider", null);
|
|
960
|
+
__decorate([
|
|
961
|
+
catchErrorsDecorator({
|
|
962
|
+
title: '获取身份源类型',
|
|
963
|
+
messages: [
|
|
964
|
+
'请确认以下各项:',
|
|
965
|
+
' 1 - 调用 auth().getProviderSubType() 的语法或参数是否正确',
|
|
966
|
+
"\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),
|
|
967
|
+
],
|
|
968
|
+
}),
|
|
969
|
+
__metadata("design:type", Function),
|
|
970
|
+
__metadata("design:paramtypes", []),
|
|
971
|
+
__metadata("design:returntype", Promise)
|
|
972
|
+
], Auth.prototype, "getProviderSubType", null);
|
|
973
|
+
return Auth;
|
|
974
|
+
}());
|
|
975
|
+
exports.Auth = Auth;
|
|
976
|
+
var component = {
|
|
977
|
+
name: COMPONENT_NAME,
|
|
978
|
+
namespace: 'auth',
|
|
979
|
+
entity: function (config) {
|
|
980
|
+
if (config === void 0) { config = {
|
|
981
|
+
region: '',
|
|
982
|
+
persistence: 'local',
|
|
983
|
+
}; }
|
|
984
|
+
if (this.authInstance) {
|
|
985
|
+
printWarn(ERRORS.INVALID_OPERATION, 'every cloudbase instance should has only one auth object');
|
|
986
|
+
return this.authInstance;
|
|
987
|
+
}
|
|
988
|
+
var _a = this.platform, adapter = _a.adapter, runtime = _a.runtime;
|
|
989
|
+
var newPersistence = config.persistence || adapter.primaryStorage;
|
|
990
|
+
if (newPersistence && newPersistence !== this.config.persistence) {
|
|
991
|
+
this.updateConfig({ persistence: newPersistence });
|
|
992
|
+
}
|
|
993
|
+
var _b = this.config, env = _b.env, persistence = _b.persistence, debug = _b.debug, clientId = _b.clientId, storage = _b.storage;
|
|
994
|
+
var oauthInstance = new oauth_1.CloudbaseOAuth({
|
|
995
|
+
clientId: clientId,
|
|
996
|
+
apiOrigin: this.request.getBaseEndPoint(),
|
|
997
|
+
storage: (config === null || config === void 0 ? void 0 : config.storage) || storage,
|
|
998
|
+
baseRequest: config === null || config === void 0 ? void 0 : config.baseRequest,
|
|
999
|
+
request: config === null || config === void 0 ? void 0 : config.request,
|
|
1000
|
+
anonymousSignInFunc: config === null || config === void 0 ? void 0 : config.anonymousSignInFunc,
|
|
1001
|
+
captchaOptions: config === null || config === void 0 ? void 0 : config.captchaOptions,
|
|
1002
|
+
});
|
|
1003
|
+
this.oauthInstance = oauthInstance;
|
|
1004
|
+
this.authInstance = new Auth({
|
|
1005
|
+
env: env,
|
|
1006
|
+
region: config.region,
|
|
1007
|
+
persistence: persistence,
|
|
1008
|
+
debug: debug,
|
|
1009
|
+
cache: this.cache,
|
|
1010
|
+
runtime: runtime,
|
|
1011
|
+
_fromApp: this,
|
|
1012
|
+
oauthInstance: oauthInstance,
|
|
1013
|
+
});
|
|
1014
|
+
return this.authInstance;
|
|
1015
|
+
},
|
|
1016
|
+
};
|
|
1017
|
+
try {
|
|
1018
|
+
cloudbase.registerComponent(component);
|
|
1019
|
+
}
|
|
1020
|
+
catch (e) { }
|
|
1021
|
+
function registerAuth(app) {
|
|
1022
|
+
try {
|
|
1023
|
+
app.registerComponent(component);
|
|
1024
|
+
}
|
|
1025
|
+
catch (e) {
|
|
1026
|
+
console.warn(e);
|
|
1027
|
+
}
|
|
1028
|
+
}
|
|
1029
|
+
exports.registerAuth = registerAuth;
|
|
1030
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxrREFBd0U7QUFNeEUsMENBQXVGO0FBSy9FLElBQUEsU0FBUyxHQUFpQixpQkFBSyxVQUF0QixFQUFFLFVBQVUsR0FBSyxpQkFBSyxXQUFWLENBQVU7QUFDL0IsSUFBQSxNQUFNLEdBQXlCLHFCQUFTLE9BQWxDLEVBQUUsa0JBQWtCLEdBQUsscUJBQVMsbUJBQWQsQ0FBYztBQUN4QyxJQUFBLG9CQUFvQixHQUFLLG1CQUFPLHFCQUFaLENBQVk7QUFDaEMsSUFBQSxxQkFBcUIsR0FBSyxrQkFBTSxzQkFBWCxDQUFXO0FBRXhDLElBQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQTtBQUU3QixJQUFNLE1BQU0sR0FBRztJQUViLG1CQUFtQixFQUFFLG1CQUFtQjtDQUN6QyxDQUFBO0FBa0JELElBQU0sUUFBUSxHQUFHLElBQUkscUJBQXFCLEVBQUUsQ0FBQTtBQU81QztJQXVCRSxjQUFZLE9BQXFCO1FBQ3ZCLElBQUEsS0FBSyxHQUFvQixPQUFPLE1BQTNCLEVBQUUsYUFBYSxHQUFLLE9BQU8sY0FBWixDQUFZO1FBQ3hDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBRWxDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUNwQixDQUFDO0lBSVksNkJBQWMsR0FBM0I7OztnQkFDRSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQVcsQ0FBQTtnQkFDakQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFXLENBQUE7Z0JBQ3ZELElBQUksQ0FBQyxPQUFPLEdB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YUFBQTtZQUNYLEtBQUssT0FBQTtZQUNMLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUVqQixPQUFPLFNBQUE7WUFDUCxRQUFRLEVBQUUsSUFBSTtZQUVkLGFBQWEsZUFBQTtTQUNkLENBQUMsQ0FBQTtRQUVGLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQTtJQUMxQixDQUFDO0NBQ0YsQ0FBQTtBQUVELElBQUk7SUFHRixTQUFTLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUE7Q0FDdkM7QUFBQyxPQUFPLENBQUMsRUFBRSxHQUFFO0FBTWQsU0FBZ0IsWUFBWSxDQUFDLEdBQTBDO0lBQ3JFLElBQUk7UUFDRixHQUFHLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUE7S0FDakM7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7S0FDaEI7QUFDSCxDQUFDO0FBTkQsb0NBTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQ2xvdWRiYXNlIH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcydcbmltcG9ydCB7IHV0aWxzLCBjb25zdGFudHMsIGhlbHBlcnMsIGV2ZW50cyB9IGZyb20gJ0BjbG91ZGJhc2UvdXRpbGl0aWVzJ1xuaW1wb3J0IHsgSUNsb3VkYmFzZUNhY2hlIH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9jYWNoZSdcbmltcG9ydCB7IElDbG91ZGJhc2VSZXF1ZXN0IH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9yZXF1ZXN0J1xuaW1wb3J0IHsgSUNsb3VkYmFzZUF1dGhDb25maWcsIElVc2VyLCBJVXNlckluZm8sIElMb2dpblN0YXRlIH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9hdXRoJ1xuaW1wb3J0IHsgSUNsb3VkYmFzZUNvbXBvbmVudCB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMvY29tcG9uZW50J1xuXG5pbXBvcnQgeyBhdXRoTW9kZWxzLCBDbG91ZGJhc2VPQXV0aCwgQXV0aE9wdGlvbnMsIENyZWRlbnRpYWxzIH0gZnJvbSAnQGNsb3VkYmFzZS9vYXV0aCdcbmltcG9ydCB7IFByb3ZpZGVyU3ViVHlwZSB9IGZyb20gJ0BjbG91ZGJhc2Uvb2F1dGgvZGlzdC9janMvYXV0aC9tb2RlbHMnXG5cbmRlY2xhcmUgY29uc3QgY2xvdWRiYXNlOiBJQ2xvdWRiYXNlXG5cbmNvbnN0IHsgcHJpbnRXYXJuLCB0aHJvd0Vycm9yIH0gPSB1dGlsc1xuY29uc3QgeyBFUlJPUlMsIENPTU1VTklUWV9TSVRFX1VSTCB9ID0gY29uc3RhbnRzXG5jb25zdCB7IGNhdGNoRXJyb3JzRGVjb3JhdG9yIH0gPSBoZWxwZXJzXG5jb25zdCB7IENsb3VkYmFzZUV2ZW50RW1pdHRlciB9ID0gZXZlbnRzXG5cbmNvbnN0IENPTVBPTkVOVF9OQU1FID0gJ2F1dGgnXG5cbmNvbnN0IEVWRU5UUyA9IHtcbiAgLy8g55m75b2V5oCB5pS55Y+Y5ZCO6Kem5Y+RXG4gIExPR0lOX1NUQVRFX0NIQU5HRUQ6ICdsb2dpblN0YXRlQ2hhbmdlZCcsXG59XG5cbmludGVyZmFjZSBVc2VySW5mbyB7XG4gIHVpZD86IHN0cmluZ1xuICBnZW5kZXI/OiBzdHJpbmdcbiAgcGljdHVyZT86IHN0cmluZ1xuICBlbWFpbD86IHN0cmluZ1xuICBlbWFpbF92ZXJpZmllZD86IGJvb2xlYW5cbiAgcGhvbmVfbnVtYmVyPzogc3RyaW5nXG4gIHVzZXJuYW1lPzogc3RyaW5nXG4gIG5hbWU/OiBzdHJpbmdcbiAgYmlydGhkYXRlPzogc3RyaW5nXG4gIHpvbmVpbmZvPzogc3RyaW5nXG4gIGxvY2FsZT86IHN0cmluZ1xuICBzdWI/OiBzdHJpbmdcbiAgY3JlYXRlZF9mcm9tPzogc3RyaW5nXG59XG5cbmNvbnN0IGV2ZW50QnVzID0gbmV3IENsb3VkYmFzZUV2ZW50RW1pdHRlcigpXG5cbmludGVyZmFjZSBJVXNlck9wdGlvbnMge1xuICBjYWNoZTogSUNsb3VkYmFzZUNhY2hlXG4gIG9hdXRoSW5zdGFuY2U6IENsb3VkYmFzZU9BdXRoXG59XG5cbmNsYXNzIFVzZXIgaW1wbGVtZW50cyBJVXNlciB7XG4gIHB1YmxpYyB1aWQ/OiBzdHJpbmdcbiAgcHVibGljIGdlbmRlcj86IHN0cmluZ1xuICBwdWJsaWMgcGljdHVyZT86IHN0cmluZ1xuICBwdWJsaWMgZW1haWw/OiBzdHJpbmdcbiAgcHVibGljIGVtYWlsVmVyaWZpZWQ/OiBib29sZWFuXG4gIHB1YmxpYyBwaG9uZU51bWJlcj86IHN0cmluZ1xuICBwdWJsaWMgdXNlcm5hbWU/OiBzdHJpbmdcbiAgcHVibGljIG5hbWU/OiBzdHJpbmdcbiAgcHVibGljIHByb3ZpZGVycz86IHtcbiAgICBpZD86IHN0cmluZ1xuICAgIHByb3ZpZGVyVXNlcklkPzogc3RyaW5nXG4gICAgbmFtZT86IHN0cmluZ1xuICB9W11cbiAgcHVibGljIGJpcnRoZGF0ZT86IHN0cmluZ1xuICBwdWJsaWMgem9uZWluZm8/OiBzdHJpbmdcbiAgcHVibGljIGxvY2FsZT86IHN0cmluZ1xuICBwdWJsaWMgc3ViPzogc3RyaW5nXG4gIHB1YmxpYyBjcmVhdGVkRnJvbT86IHN0cmluZ1xuXG4gIHByaXZhdGUgY2FjaGU6IElDbG91ZGJhc2VDYWNoZVxuICBwcml2YXRlIG9hdXRoSW5zdGFuY2U6IENsb3VkYmFzZU9BdXRoIC8vIENsb3VkYmFzZU9BdXRoIOexu+Wei1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IElVc2VyT3B0aW9ucykge1xuICAgIGNvbnN0IHsgY2FjaGUsIG9hdXRoSW5zdGFuY2UgfSA9IG9wdGlvbnNcbiAgICB0aGlzLmNhY2hlID0gY2FjaGVcbiAgICB0aGlzLm9hdXRoSW5zdGFuY2UgPSBvYXV0aEluc3RhbmNlXG5cbiAgICB0aGlzLnNldFVzZXJJbmZvKClcbiAgfVxuICAvKipcbiAgICog6I635Y+W5pys5Zyw55So5oi35L+h5oGvLeWQjOatpVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNoZWNrTG9jYWxJbmZvKCkge1xuICAgIHRoaXMudWlkID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCd1aWQnKSBhcyBzdHJpbmdcbiAgICB0aGlzLmdlbmRlciA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnZ2VuZGVyJykgYXMgc3RyaW5nXG4gICAgdGhpcy5waWN0dXJlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwaWN0dXJlJykgYXMgc3RyaW5nXG4gICAgdGhpcy5lbWFpbCA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnZW1haWwnKSBhcyBzdHJpbmdcbiAgICB0aGlzLmVtYWlsVmVyaWZpZWQgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2VtYWlsX3ZlcmlmaWVkJykgYXMgYm9vbGVhblxuICAgIHRoaXMucGhvbmVOdW1iZXIgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3Bob25lX251bWJlcicpIGFzIHN0cmluZ1xuICAgIHRoaXMudXNlcm5hbWUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3VzZXJuYW1lJykgYXMgc3RyaW5nXG4gICAgdGhpcy5uYW1lID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCduYW1lJykgYXMgc3RyaW5nXG4gICAgdGhpcy5iaXJ0aGRhdGUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2JpcnRoZGF0ZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuem9uZWluZm8gPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3pvbmVpbmZvJykgYXMgc3RyaW5nXG4gICAgdGhpcy5sb2NhbGUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2xvY2FsZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuc3ViID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdzdWInKSBhcyBzdHJpbmdcbiAgICB0aGlzLmNyZWF0ZWRGcm9tID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdjcmVhdGVkX2Zyb20nKSBhcyBzdHJpbmdcbiAgICB0aGlzLnByb3ZpZGVycyA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygncHJvdmlkZXJzJykgYXMgYW55XG4gIH1cbiAgLyoqXG4gICAqIOiOt+WPluacrOWcsOeUqOaIt+S/oeaBry3lvILmraVcbiAgICovXG4gIHB1YmxpYyBhc3luYyBjaGVja0xvY2FsSW5mb0FzeW5jKCkge1xuICAgIHRoaXMudWlkID0gYXdhaXQgdGhpcy5nZXRMb2NhbFVzZXJJbmZvQXN5bmMoJ3VpZCcpXG4gICAgdGhpcy5nZW5kZXIgPSBhd2FpdCB0aGlzLmdldExvY2FsVXNlckluZm9Bc3luYygnZ2VuZGVyJylcbiAgICB0aGlzLnBpY3R1cmUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3BpY3R1cmUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLmVtYWlsID0gYXdhaXQgdGhpcy5nZXRMb2NhbFVzZXJJbmZvQXN5bmMoJ2VtYWlsJylcbiAgICB0aGlzLmVtYWlsVmVyaWZpZWQgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2VtYWlsX3ZlcmlmaWVkJykgYXMgYm9vbGVhblxuICAgIHRoaXMucGhvbmVOdW1iZXIgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3Bob25lX251bWJlcicpIGFzIHN0cmluZ1xuICAgIHRoaXMudXNlcm5hbWUgPSBhd2FpdCB0aGlzLmdldExvY2FsVXNlckluZm9Bc3luYygndXNlcm5hbWUnKVxuICAgIHRoaXMubmFtZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnbmFtZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuYmlydGhkYXRlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdiaXJ0aGRhdGUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLnpvbmVpbmZvID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCd6b25laW5mbycpIGFzIHN0cmluZ1xuICAgIHRoaXMubG9jYWxlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdsb2NhbGUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLnN1YiA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnc3ViJykgYXMgc3RyaW5nXG4gICAgdGhpcy5jcmVhdGVkRnJvbSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnY3JlYXRlZF9mcm9tJykgYXMgc3RyaW5nXG4gICAgdGhpcy5wcm92aWRlcnMgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3Byb3ZpZGVycycpIGFzIGFueVxuICB9XG5cbiAgLyoqXG4gICAqIOabtOaWsOeUqOaIt+S/oeaBr1xuICAgKiBAcGFyYW0gdXNlckluZm9cbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfmm7TmlrDnlKjmiLfkv6Hmga/lpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggVXNlci51cGRhdGUoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOeUqOaIt+S/oeaBr+S4reaYr+WQpuWMheWQq+mdnuazleWAvCcsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgdXBkYXRlKHVzZXJJbmZvOiBhdXRoTW9kZWxzLlVzZXJQcm9maWxlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY29uc3QgeyBuYW1lLCBnZW5kZXIsIGF2YXRhclVybCwgcHJvdmluY2UsIGNvdW50cnksIGNpdHkgfSA9IHVzZXJJbmZvXG4gICAgY29uc3QgbmV3VXNlckluZm8gPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zZXRVc2VyUHJvZmlsZSh7IC4uLnVzZXJJbmZvIH0pXG5cbiAgICB0aGlzLnNldExvY2FsVXNlckluZm8obmV3VXNlckluZm8pXG4gIH1cbiAgLyoqXG4gICAqIOabtOaWsOWvhueggVxuICAgKiBAcGFyYW0gbmV3UGFzc3dvcmRcbiAgICogQHBhcmFtIG9sZFBhc3N3b3JkXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn5pu05paw5a+G56CB5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIFVzZXIudXBkYXRlUGFzc3dvcmQoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMyAtIOaWsOWvhueggeS4reaYr+WQpuWMheWQq+mdnuazleWtl+espicsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgdXBkYXRlUGFzc3dvcmQobmV3UGFzc3dvcmQ6IHN0cmluZywgb2xkUGFzc3dvcmQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS51cGRhdGVQYXNzd29yZEJ5T2xkKHtcbiAgICAgIG9sZF9wYXNzd29yZDogb2xkUGFzc3dvcmQsXG4gICAgICBuZXdfcGFzc3dvcmQ6IG5ld1Bhc3N3b3JkLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICog5pu05paw55So5oi35ZCNXG4gICAqIEBwYXJhbSB1c2VybmFtZVxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+abtOaWsOeUqOaIt+WQjeWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBVc2VyLnVwZGF0ZVVzZXJuYW1lKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDlvZPliY3njq/looPmmK/lkKblvIDpgJrkuobnlKjmiLflkI3lr4bnoIHnmbvlvZUnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIHVwZGF0ZVVzZXJuYW1lKHVzZXJuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHVzZXJuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3dFcnJvcihFUlJPUlMuSU5WQUxJRF9QQVJBTVMsICd1c2VybmFtZSBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy51cGRhdGUoe1xuICAgICAgdXNlcm5hbWUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiDliLfmlrDmnKzlnLDnlKjmiLfkv6Hmga/jgILlvZPnlKjmiLflnKjlhbbku5blrqLmiLfnq6/mm7TmlrDnlKjmiLfkv6Hmga/kuYvlkI7vvIzlj6/ku6XosIPnlKjmraTmjqXlj6PlkIzmraXmm7TmlrDkuYvlkI7nmoTkv6Hmga/jgIJcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfliLfmlrDmnKzlnLDnlKjmiLfkv6Hmga/lpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggVXNlci5yZWZyZXNoKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyByZWZyZXNoKHBhcmFtcz86IHsgdmVyc2lvbj86IHN0cmluZzsgcXVlcnk/OiBhbnkgfSk6IFByb21pc2U8SVVzZXJJbmZvPiB7XG4gICAgY29uc3QgbmV3VXNlckluZm8gPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRVc2VySW5mbyhwYXJhbXMpXG4gICAgdGhpcy5zZXRMb2NhbFVzZXJJbmZvKG5ld1VzZXJJbmZvKVxuICAgIHJldHVybiBuZXdVc2VySW5mb1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2NhbFVzZXJJbmZvKGtleTogc3RyaW5nKTogc3RyaW5nIHwgYm9vbGVhbiB7XG4gICAgY29uc3QgeyB1c2VySW5mb0tleSB9ID0gdGhpcy5jYWNoZS5rZXlzXG4gICAgY29uc3QgdXNlckluZm8gPSB0aGlzLmNhY2hlLmdldFN0b3JlKHVzZXJJbmZvS2V5KVxuICAgIHJldHVybiB1c2VySW5mb1trZXldXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldExvY2FsVXNlckluZm9Bc3luYyhrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgeyB1c2VySW5mb0tleSB9ID0gdGhpcy5jYWNoZS5rZXlzXG4gICAgY29uc3QgdXNlckluZm8gPSBhd2FpdCB0aGlzLmNhY2hlLmdldFN0b3JlQXN5bmModXNlckluZm9LZXkpXG4gICAgcmV0dXJuIHVzZXJJbmZvW2tleV1cbiAgfVxuXG4gIHByaXZhdGUgc2V0VXNlckluZm8oKSB7XG4gICAgY29uc3QgeyB1c2VySW5mb0tleSB9ID0gdGhpcy5jYWNoZS5rZXlzXG4gICAgY29uc3QgdXNlckluZm8gPSB0aGlzLmNhY2hlLmdldFN0b3JlKHVzZXJJbmZvS2V5KVxuICAgIDtbXG4gICAgICAndWlkJyxcbiAgICAgICdlbWFpbCcsXG4gICAgICAnbmFtZScsXG4gICAgICAnZ2VuZGVyJyxcbiAgICAgICdwaWN0dXJlJyxcbiAgICAgICdlbWFpbF92ZXJpZmllZCcsXG4gICAgICAncGhvbmVfbnVtYmVyJyxcbiAgICAgICdiaXJ0aGRhdGUnLFxuICAgICAgJ3pvbmVpbmZvJyxcbiAgICAgICdsb2NhbGUnLFxuICAgICAgJ3N1YicsXG4gICAgICAnY3JlYXRlZF9mcm9tJyxcbiAgICAgICdwcm92aWRlcnMnLFxuICAgICAgJ3VzZXJuYW1lJyxcbiAgICBdLmZvckVhY2goKGluZm9LZXkpID0+IHtcbiAgICAgIHRoaXNbaW5mb0tleV0gPSB1c2VySW5mb1tpbmZvS2V5XVxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIHNldExvY2FsVXNlckluZm8odXNlckluZm86IGFueSkge1xuICAgIGNvbnN0IHsgdXNlckluZm9LZXkgfSA9IHRoaXMuY2FjaGUua2V5c1xuICAgIHRoaXMuY2FjaGUuc2V0U3RvcmUodXNlckluZm9LZXksIHVzZXJJbmZvKVxuICAgIHRoaXMuc2V0VXNlckluZm8oKVxuICB9XG59XG5pbnRlcmZhY2UgSUxvZ2luU3RhdGVPcHRpb25zIGV4dGVuZHMgSVVzZXJPcHRpb25zIHtcbiAgZW52SWQ6IHN0cmluZ1xufVxuZXhwb3J0IGNsYXNzIExvZ2luU3RhdGUgaW1wbGVtZW50cyBJTG9naW5TdGF0ZSB7XG4gIHB1YmxpYyB1c2VyOiBJVXNlclxuICBwdWJsaWMgb2F1dGhMb2dpblN0YXRlOiBhbnlcblxuICBwcml2YXRlIG9hdXRoSW5zdGFuY2U6IENsb3VkYmFzZU9BdXRoXG4gIHByaXZhdGUgY2FjaGU6IElDbG91ZGJhc2VDYWNoZVxuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IElMb2dpblN0YXRlT3B0aW9ucykge1xuICAgIGNvbnN0IHsgZW52SWQsIGNhY2hlLCBvYXV0aEluc3RhbmNlIH0gPSBvcHRpb25zXG4gICAgaWYgKCFlbnZJZCkge1xuICAgICAgdGhyb3dFcnJvcihFUlJPUlMuSU5WQUxJRF9QQVJBTVMsICdlbnZJZCBpcyBub3QgZGVmaW5lZCcpXG4gICAgfVxuICAgIHRoaXMuY2FjaGUgPSBjYWNoZVxuICAgIHRoaXMub2F1dGhJbnN0YW5jZSA9IG9hdXRoSW5zdGFuY2VcblxuICAgIHRoaXMudXNlciA9IG5ldyBVc2VyKHtcbiAgICAgIGNhY2hlOiB0aGlzLmNhY2hlLFxuICAgICAgb2F1dGhJbnN0YW5jZSxcbiAgICB9KVxuICB9XG5cbiAgcHVibGljIGNoZWNrTG9jYWxTdGF0ZSgpIHtcbiAgICB0aGlzLm9hdXRoTG9naW5TdGF0ZSA9IHRoaXMub2F1dGhJbnN0YW5jZT8uYXV0aEFwaS5oYXNMb2dpblN0YXRlU3luYygpXG4gICAgdGhpcy51c2VyLmNoZWNrTG9jYWxJbmZvKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjaGVja0xvY2FsU3RhdGVBc3luYygpIHtcbiAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2U/LmF1dGhBcGkuZ2V0TG9naW5TdGF0ZSgpXG4gICAgYXdhaXQgdGhpcy51c2VyLmNoZWNrTG9jYWxJbmZvQXN5bmMoKVxuICB9XG59XG5cbmNsYXNzIEF1dGgge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogSUNsb3VkYmFzZUF1dGhDb25maWdcbiAgcHJpdmF0ZSByZWFkb25seSBjYWNoZTogSUNsb3VkYmFzZUNhY2hlXG5cbiAgcHJpdmF0ZSBvYXV0aEluc3RhbmNlOiBDbG91ZGJhc2VPQXV0aFxuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogSUNsb3VkYmFzZUF1dGhDb25maWcgJiB7IGNhY2hlOiBJQ2xvdWRiYXNlQ2FjaGU7IHJlcXVlc3Q/OiBJQ2xvdWRiYXNlUmVxdWVzdDsgcnVudGltZT86IHN0cmluZyB9LCkge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnXG4gICAgdGhpcy5jYWNoZSA9IGNvbmZpZy5jYWNoZVxuICAgIHRoaXMub2F1dGhJbnN0YW5jZSA9IGNvbmZpZy5vYXV0aEluc3RhbmNlXG4gIH1cblxuICAvKipcbiAgICog57uR5a6a5omL5py65Y+3XG4gICAqIEBwYXJhbSBwaG9uZU51bWJlclxuICAgKiBAcGFyYW0gcGhvbmVDb2RlXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn57uR5a6a5omL5py65Y+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+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudW5iaW5kUHJvdmlkZXIocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqIOabtOaWsOmCrueuseWcsOWdgFxuICAgKiBAcGFyYW0gZW1haWxcbiAgICogQHBhcmFtIHN1ZG9fdG9rZW5cbiAgICogQHBhcmFtIHZlcmlmaWNhdGlvbl90b2tlblxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+e7keWumumCrueuseWcsOWdgOWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuYmluZEVtYWlsKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDlvZPliY3njq/looPmmK/lkKblvIDpgJrkuobpgq7nrrHlr4bnoIHnmbvlvZUnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGJpbmRFbWFpbChwYXJhbXM6IGF1dGhNb2RlbHMuQmluZEVtYWlsUmVxdWVzdCkge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5iaW5kRW1haWwocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqIHZlcmlmeVxuICAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuVmVyaWZ5UmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGF1dGhNb2RlbHMuVmVyaWZ5UmVzcG9uc2U+fVxuICAgKiBAbWVtYmVyb2YgVXNlclxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+mqjOivgeeggemqjOivgeWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkudmVyaWZ5KCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDlvZPliY3njq/looPmmK/lkKblvIDpgJrkuobmiYvmnLrpqozor4HnoIEv6YKu566x55m75b2VJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyB2ZXJpZnkocGFyYW1zOiBhdXRoTW9kZWxzLlZlcmlmeVJlcXVlc3QpOiBQcm9taXNlPGF1dGhNb2RlbHMuVmVyaWZ5UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudmVyaWZ5KHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5bpqozor4HnoIFcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLkdldFZlcmlmaWNhdGlvblJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhdXRoTW9kZWxzLkdldFZlcmlmaWNhdGlvblJlc3BvbnNlPn1cbiAgICogQG1lbWJlcm9mIFVzZXJcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfojrflj5bpqozor4HnoIHlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmdldFZlcmlmaWNhdGlvbigpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g5b2T5YmN546v5aKD5piv5ZCm5byA6YCa5LqG5omL5py66aqM6K+B56CBL+mCrueuseeZu+W9lScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0VmVyaWZpY2F0aW9uKHBhcmFtczogYXV0aE1vZGVscy5HZXRWZXJpZmljYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxhdXRoTW9kZWxzLkdldFZlcmlmaWNhdGlvblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldFZlcmlmaWNhdGlvbihwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5b2T5YmN55m75b2V55qE55So5oi35L+h5oGvLeWQjOatpVxuICAgKi9cbiAgZ2V0IGN1cnJlbnRVc2VyKCkge1xuICAgIGlmICh0aGlzLmNhY2hlLm1vZGUgPT09ICdhc3luYycpIHtcbiAgICAgIC8vIGFzeW5jIHN0b3JhZ2XnmoTlubPlj7DosIPnlKjmraRBUEnmj5DnpLpcbiAgICAgIHByaW50V2FybihcbiAgICAgICAgRVJST1JTLklOVkFMSURfT1BFUkFUSU9OLFxuICAgICAgICAnY3VycmVudCBwbGF0Zm9ybVxcJ3Mgc3RvcmFnZSBpcyBhc3luY2hyb25vdXMsIHBsZWFzZSB1c2UgZ2V0Q3VycmVudFVzZXIgaW5zdGVlZCcsXG4gICAgICApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBsb2dpblN0YXRlID0gdGhpcy5oYXNMb2dpblN0YXRlKClcblxuICAgIGlmIChsb2dpblN0YXRlKSB7XG4gICAgICByZXR1cm4gbG9naW5TdGF0ZS51c2VyIHx8IG51bGxcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5blvZPliY3nmbvlvZXnmoTnlKjmiLfkv6Hmga8t5byC5q2lXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6I635Y+W55So5oi35L+h5oGv5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5nZXRDdXJyZW50VXNlcigpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0Q3VycmVudFVzZXIoKSB7XG4gICAgY29uc3QgbG9naW5TdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0TG9naW5TdGF0ZSgpXG4gICAgaWYgKGxvZ2luU3RhdGUpIHtcbiAgICAgIGF3YWl0IGxvZ2luU3RhdGUudXNlci5jaGVja0xvY2FsSW5mb0FzeW5jKClcbiAgICAgIHJldHVybiBsb2dpblN0YXRlLnVzZXIgfHwgbnVsbFxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIOWMv+WQjeeZu+W9lVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfljL/lkI3nmbvlvZXlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDlvZPliY3njq/looPmmK/lkKblvIDlkK/kuobljL/lkI3nmbvlvZUnLFxuICAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuc2lnbkluQW5vbnltb3VzbHkoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHNpZ25JbkFub255bW91c2x5KGRhdGE6IHtcbiAgICBwcm92aWRlcl90b2tlbj86IHN0cmluZ1xuICB9ID0ge30sKTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluQW5vbnltb3VzbHkoZGF0YSlcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcbiAgfVxuXG4gIC8qKlxuICAgKiDorr7nva7ojrflj5boh6rlrprkuYnnmbvlvZUgdGlja2V0IOWHveaVsFxuICAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuR2V0Q3VzdG9tU2lnblRpY2tldEZufSBnZXRUaWNrRm5cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIHB1YmxpYyBzZXRDdXN0b21TaWduRnVuYyhnZXRUaWNrRm46IGF1dGhNb2RlbHMuR2V0Q3VzdG9tU2lnblRpY2tldEZuKTogdm9pZCB7XG4gICAgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2V0Q3VzdG9tU2lnbkZ1bmMoZ2V0VGlja0ZuKVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iHquWumuS5ieeZu+W9leWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huiHquWumuS5ieeZu+W9lScsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduSW5XaXRoQ3VzdG9tVGlja2V0KCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDMgLSB0aWNrZXQg5piv5ZCm5b2S5bGe5LqO5b2T5YmN546v5aKDJyxcbiAgICAgICcgIDQgLSDliJvlu7ogdGlja2V0IOeahOiHquWumuS5ieeZu+W9leengemSpeaYr+WQpui/h+acnycsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aEN1c3RvbVRpY2tldChwYXJhbXM/OiB7IHZlcnNpb24/OiBzdHJpbmcgfSk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbldpdGhDdXN0b21UaWNrZXQocGFyYW1zKVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5TaWduSW5SZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnbkluKHBhcmFtczogYXV0aE1vZGVscy5TaWduSW5SZXF1ZXN0KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluKHBhcmFtcylcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuU2lnblVwUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+azqOWGjOWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huaMh+WumueZu+W9leaWueW8jycsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduVXAoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHNpZ25VcChwYXJhbXM6IGF1dGhNb2RlbHMuU2lnblVwUmVxdWVzdCk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25VcChwYXJhbXMpXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gIH1cblxuICAvKipcbiAgICog6K6+572u5a+G56CBXG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5TZXRQYXNzd29yZFJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRQYXNzd29yZChwYXJhbXM6IGF1dGhNb2RlbHMuU2V0UGFzc3dvcmRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNldFBhc3N3b3JkKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDmo4DmtYvnlKjmiLflkI3mmK/lkKblt7Lnu4/ljaDnlKhcbiAgICogQHBhcmFtIHVzZXJuYW1lXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6I635Y+W55So5oi35piv5ZCm6KKr5Y2g55So5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5pc1VzZXJuYW1lUmVnaXN0ZXJlZCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgaXNVc2VybmFtZVJlZ2lzdGVyZWQodXNlcm5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0eXBlb2YgdXNlcm5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvd0Vycm9yKEVSUk9SUy5JTlZBTElEX1BBUkFNUywgJ3VzZXJuYW1lIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cblxuICAgIGNvbnN0IHsgZXhpc3QgfSA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmNoZWNrSWZVc2VyRXhpc3QoeyB1c2VybmFtZSB9KVxuICAgIHJldHVybiBleGlzdFxuICB9XG5cbiAgLyoqXG4gICAqIOeZu+WHulxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+eUqOaIt+eZu+WHuuWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuc2lnbk91dCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g5b2T5YmN55So5oi35piv5ZCm5Li65Yy/5ZCN55m75b2V77yI5Yy/5ZCN55m75b2V5LiN5pSv5oyBc2lnbk91dO+8iScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgc2lnbk91dCgpIHtcbiAgICBjb25zdCB7IHVzZXJJbmZvS2V5IH0gPSB0aGlzLmNhY2hlLmtleXNcbiAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduT3V0KClcbiAgICBhd2FpdCB0aGlzLmNhY2hlLnJlbW92ZVN0b3JlQXN5bmModXNlckluZm9LZXkpXG4gICAgZXZlbnRCdXMuZmlyZShFVkVOVFMuTE9HSU5fU1RBVEVfQ0hBTkdFRClcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5bmnKzlnLDnmbvlvZXmgIEt5ZCM5q2lXG4gICAqL1xuICBwdWJsaWMgaGFzTG9naW5TdGF0ZSgpOiBMb2dpblN0YXRlIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuY2FjaGUubW9kZSA9PT0gJ2FzeW5jJykge1xuICAgICAgLy8gYXN5bmMgc3RvcmFnZeeahOW5s+WPsOiwg+eUqOatpEFQSeaPkOekulxuICAgICAgcHJpbnRXYXJuKFxuICAgICAgICBFUlJPUlMuSU5WQUxJRF9PUEVSQVRJT04sXG4gICAgICAgICdjdXJyZW50IHBsYXRmb3JtXFwncyBzdG9yYWdlIGlzIGFzeW5jaHJvbm91cywgcGxlYXNlIHVzZSBnZXRMb2dpblN0YXRlIGluc3RlZWQnLFxuICAgICAgKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgb2F1dGhMb2dpblN0YXRlID0gdGhpcy5vYXV0aEluc3RhbmNlPy5hdXRoQXBpLmhhc0xvZ2luU3RhdGVTeW5jKClcbiAgICBpZiAob2F1dGhMb2dpblN0YXRlKSB7XG4gICAgICBjb25zdCBsb2dpblN0YXRlID0gbmV3IExvZ2luU3RhdGUoe1xuICAgICAgICBlbnZJZDogdGhpcy5jb25maWcuZW52LFxuICAgICAgICBjYWNoZTogdGhpcy5jYWNoZSxcbiAgICAgICAgb2F1dGhJbnN0YW5jZTogdGhpcy5vYXV0aEluc3RhbmNlLFxuICAgICAgfSlcbiAgICAgIHJldHVybiBsb2dpblN0YXRlXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5pys5Zyw55m75b2V5oCBLeW8guatpVxuICAgKiDmraRBUEnkuLrlhbzlrrnlvILmraVzdG9yYWdl55qE5bmz5Y+wXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6I635Y+W5pys5Zyw55m75b2V5oCB5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5nZXRMb2dpblN0YXRlKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBnZXRMb2dpblN0YXRlKCkge1xuICAgIGNvbnN0IG9hdXRoTG9naW5TdGF0ZSA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldExvZ2luU3RhdGUoKVxuICAgIGlmIChvYXV0aExvZ2luU3RhdGUpIHtcbiAgICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBuZXcgTG9naW5TdGF0ZSh7XG4gICAgICAgIGVudklkOiB0aGlzLmNvbmZpZy5lbnYsXG4gICAgICAgIGNhY2hlOiB0aGlzLmNhY2hlLFxuICAgICAgICBvYXV0aEluc3RhbmNlOiB0aGlzLm9hdXRoSW5zdGFuY2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIGxvZ2luU3RhdGVcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPlueUqOaIt+S/oeaBr+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOaYr+WQpuW3sueZu+W9lScsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5nZXRVc2VySW5mbygpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0VXNlckluZm8ocGFyYW1zPzogeyB2ZXJzaW9uPzogc3RyaW5nIH0pOiBQcm9taXNlPElVc2VySW5mbz4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRVc2VySW5mbyhwYXJhbXMpXG4gIH1cblxuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6I635Y+W5b6u5pCt5o+S5Lu255So5oi35L+h5oGv5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g5piv5ZCm5bey55m75b2VJyxcbiAgICAgICcgIDIgLSDosIPnlKggYXV0aCgpLmdldFdlZGFVc2VySW5mbygpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0V2VkYVVzZXJJbmZvKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldFdlZGFVc2VySW5mbygpXG4gIH1cblxuICAvKipcbiAgICogZ2V0QXV0aEhlYWRlciDlhbzlrrnlpITnkIZcbiAgICog6L+U5Zue56m65a+56LGhXG4gICAqL1xuICBwdWJsaWMgZ2V0QXV0aEhlYWRlcigpOiB7fSB7XG4gICAgY29uc29sZS5lcnJvcignQXV0aC5nZXRBdXRoSGVhZGVyIEFQSSDlt7Llup/lvIMnKVxuICAgIHJldHVybiB7fVxuICB9XG5cbiAgLyoqXG4gICAqIOS4uuW3suaciei0puaIt+e7keesrOS4ieaWuei0puaIt1xuICAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuQmluZFdpdGhQcm92aWRlclJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfnu5HlrprnrKzkuInmlrnnmbvlvZXmlrnlvI/lpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmJpbmRXaXRoUHJvdmlkZXIoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOatpOi0puaIt+aYr+WQpuW3sue7j+e7keWumuatpOesrOS4ieaWuScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgYmluZFdpdGhQcm92aWRlcihwYXJhbXM6IGF1dGhNb2RlbHMuQmluZFdpdGhQcm92aWRlclJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuYmluZFdpdGhQcm92aWRlcihwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICog5p+l6K+i55So5oi3XG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5RdWVyeVVzZXJQcm9maWxlUmVxdWVzdH0gYXBwZW5kZWRfcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGF1dGhNb2RlbHMuVXNlclByb2ZpbGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHF1ZXJ5VXNlcihxdWVyeU9iajogYXV0aE1vZGVscy5RdWVyeVVzZXJQcm9maWxlUmVxdWVzdCk6IFByb21pc2U8YXV0aE1vZGVscy5RdWVyeVVzZXJQcm9maWxlUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkucXVlcnlVc2VyUHJvZmlsZShxdWVyeU9iailcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBY2Nlc3NUb2tlbigpIHtcbiAgICBjb25zdCBvYXV0aEFjY2Vzc1Rva2VuUmVzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLm9hdXRoMmNsaWVudC5nZXRBY2Nlc3NUb2tlbigpXG4gICAgcmV0dXJuIHtcbiAgICAgIGFjY2Vzc1Rva2VuOiBvYXV0aEFjY2Vzc1Rva2VuUmVzLFxuICAgICAgZW52OiB0aGlzLmNvbmZpZy5lbnYsXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdyYW50UHJvdmlkZXJUb2tlbihwYXJhbXM6IGF1dGhNb2RlbHMuR3JhbnRQcm92aWRlclRva2VuUmVxdWVzdCwpOiBQcm9taXNlPGF1dGhNb2RlbHMuR3JhbnRQcm92aWRlclRva2VuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ3JhbnRQcm92aWRlclRva2VuKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwYXRjaFByb3ZpZGVyVG9rZW4ocGFyYW1zOiBhdXRoTW9kZWxzLlBhdGNoUHJvdmlkZXJUb2tlblJlcXVlc3QsKTogUHJvbWlzZTxhdXRoTW9kZWxzLlBhdGNoUHJvdmlkZXJUb2tlblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnBhdGNoUHJvdmlkZXJUb2tlbihwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aFByb3ZpZGVyKHBhcmFtczogYXV0aE1vZGVscy5TaWduSW5XaXRoUHJvdmlkZXJSZXF1ZXN0KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluV2l0aFByb3ZpZGVyKHBhcmFtcylcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBncmFudFRva2VuKHBhcmFtczogYXV0aE1vZGVscy5HcmFudFRva2VuUmVxdWVzdCk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdyYW50VG9rZW4ocGFyYW1zKVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdlblByb3ZpZGVyUmVkaXJlY3RVcmkocGFyYW1zOiBhdXRoTW9kZWxzLkdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXF1ZXN0LCk6IFByb21pc2U8YXV0aE1vZGVscy5HZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2VuUHJvdmlkZXJSZWRpcmVjdFVyaShwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVzZXRQYXNzd29yZChwYXJhbXM6IGF1dGhNb2RlbHMuUmVzZXRQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkucmVzZXRQYXNzd29yZChwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGV2aWNlQXV0aG9yaXplKHBhcmFtczogYXV0aE1vZGVscy5EZXZpY2VBdXRob3JpemVSZXF1ZXN0KTogUHJvbWlzZTxhdXRoTW9kZWxzLkRldmljZUF1dGhvcml6ZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmRldmljZUF1dGhvcml6ZShwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc3VkbyhwYXJhbXM6IGF1dGhNb2RlbHMuU3Vkb1JlcXVlc3QpOiBQcm9taXNlPGF1dGhNb2RlbHMuU3Vkb1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnN1ZG8ocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZU1lKHBhcmFtczogYXV0aE1vZGVscy5XaXRoU3Vkb1JlcXVlc3QpOiBQcm9taXNlPGF1dGhNb2RlbHMuVXNlclByb2ZpbGU+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZGVsZXRlTWUocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFByb3ZpZGVycygpOiBQcm9taXNlPGF1dGhNb2RlbHMuVXNlclByb2ZpbGVQcm92aWRlcj4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRQcm92aWRlcnMoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvZ2luU2NvcGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkubG9naW5TY29wZSgpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9naW5Hcm91cHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5sb2dpbkdyb3VwcygpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25Mb2dpblN0YXRlQ2hhbmdlZChjYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICBldmVudEJ1cy5vbihFVkVOVFMuTE9HSU5fU1RBVEVfQ0hBTkdFRCwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgbG9naW5TdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0TG9naW5TdGF0ZSgpXG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGxvZ2luU3RhdGUpXG4gICAgfSlcbiAgICAvLyDnq4vliLvmiafooYzkuIDmrKHlm57osINcbiAgICBjb25zdCBsb2dpblN0YXRlID0gYXdhaXQgdGhpcy5nZXRMb2dpblN0YXRlKClcbiAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGxvZ2luU3RhdGUpXG4gIH1cblxuICAvKipcbiAgICog5by65Yi25Yi35pawdG9rZW5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZnJlc2hUb2tlbkZvcmNlKHBhcmFtczogeyB2ZXJzaW9uPzogc3RyaW5nIH0pOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnJlZnJlc2hUb2tlbkZvcmNlKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5bouqvku73kv6Hmga9cbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDcmVkZW50aWFscygpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldENyZWRlbnRpYWxzKClcbiAgfVxuXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfojrflj5bouqvku73mupDnsbvlnosnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmdldFByb3ZpZGVyU3ViVHlwZSgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0UHJvdmlkZXJTdWJUeXBlKCk6IFByb21pc2U8UHJvdmlkZXJTdWJUeXBlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldFByb3ZpZGVyU3ViVHlwZSgpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3JlYXRlQ2FwdGNoYURhdGEocGFyYW1zOiB7IHN0YXRlOiBzdHJpbmc7IHJlZGlyZWN0X3VyaT86IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmNyZWF0ZUNhcHRjaGFEYXRhKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB2YXJpZnlDYXB0Y2hhRGF0YShwYXJhbXM6IHsgdG9rZW46IHN0cmluZzsga2V5OiBzdHJpbmcgfSkge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS52YXJpZnlDYXB0Y2hhRGF0YShwYXJhbXMpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZUxvZ2luU3RhdGUocGFyYW1zPzogeyB2ZXJzaW9uPzogc3RyaW5nOyBxdWVyeT86IGFueSB9KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgY29uc3QgbG9naW5TdGF0ZSA9IG5ldyBMb2dpblN0YXRlKHtcbiAgICAgIGVudklkOiB0aGlzLmNvbmZpZy5lbnYsXG4gICAgICBjYWNoZTogdGhpcy5jYWNoZSxcbiAgICAgIG9hdXRoSW5zdGFuY2U6IHRoaXMub2F1dGhJbnN0YW5jZSxcbiAgICB9KVxuXG4gICAgYXdhaXQgbG9naW5TdGF0ZS5jaGVja0xvY2FsU3RhdGVBc3luYygpXG4gICAgYXdhaXQgbG9naW5TdGF0ZS51c2VyLnJlZnJlc2gocGFyYW1zKVxuICAgIGV2ZW50QnVzLmZpcmUoRVZFTlRTLkxPR0lOX1NUQVRFX0NIQU5HRUQpXG4gICAgcmV0dXJuIGxvZ2luU3RhdGVcbiAgfVxufVxuXG5jb25zdCBjb21wb25lbnQ6IElDbG91ZGJhc2VDb21wb25lbnQgPSB7XG4gIG5hbWU6IENPTVBPTkVOVF9OQU1FLFxuICBuYW1lc3BhY2U6ICdhdXRoJyxcbiAgZW50aXR5KGNvbmZpZzogUGljazxJQ2xvdWRiYXNlQXV0aENvbmZpZywgJ3JlZ2lvbicgfCAncGVyc2lzdGVuY2UnPiAmIFBhcnRpYWw8QXV0aE9wdGlvbnM+ID0ge1xuICAgIHJlZ2lvbjogJycsXG4gICAgcGVyc2lzdGVuY2U6ICdsb2NhbCcsXG4gIH0sKSB7XG4gICAgaWYgKHRoaXMuYXV0aEluc3RhbmNlKSB7XG4gICAgICBwcmludFdhcm4oRVJST1JTLklOVkFMSURfT1BFUkFUSU9OLCAnZXZlcnkgY2xvdWRiYXNlIGluc3RhbmNlIHNob3VsZCBoYXMgb25seSBvbmUgYXV0aCBvYmplY3QnKVxuICAgICAgcmV0dXJuIHRoaXMuYXV0aEluc3RhbmNlXG4gICAgfVxuICAgIGNvbnN0IHsgYWRhcHRlciwgcnVudGltZSB9ID0gdGhpcy5wbGF0Zm9ybVxuICAgIC8vIOWmguS4jeaYjuehruaMh+WumnBlcnNpc3RlbmNl5YiZ5LyY5YWI5Y+W5ZCE5bmz5Y+wYWRhcHRlcummlumAie+8jOWFtuasoWxvY2FsU3RvcmFnZVxuICAgIGNvbnN0IG5ld1BlcnNpc3RlbmNlID0gY29uZmlnLnBlcnNpc3RlbmNlIHx8IGFkYXB0ZXIucHJpbWFyeVN0b3JhZ2VcbiAgICBpZiAobmV3UGVyc2lzdGVuY2UgJiYgbmV3UGVyc2lzdGVuY2UgIT09IHRoaXMuY29uZmlnLnBlcnNpc3RlbmNlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbmZpZyh7IHBlcnNpc3RlbmNlOiBuZXdQZXJzaXN0ZW5jZSB9KVxuICAgIH1cblxuICAgIGNvbnN0IHsgZW52LCBwZXJzaXN0ZW5jZSwgZGVidWcsIGNsaWVudElkLCBzdG9yYWdlIH0gPSB0aGlzLmNvbmZpZ1xuICAgIGNvbnN0IG9hdXRoSW5zdGFuY2UgPSBuZXcgQ2xvdWRiYXNlT0F1dGgoe1xuICAgICAgY2xpZW50SWQsXG4gICAgICBhcGlPcmlnaW46IHRoaXMucmVxdWVzdC5nZXRCYXNlRW5kUG9pbnQoKSxcbiAgICAgIC8vIEB0b2RvIOS7peS4i+acgOWlvei1sGFkYXB0b3LlpITnkIbvvIznm67liY1vYXV0aOaooeWdl+ayoeaMiWFkYXB0b3LmjqXlj6Porr7orqFcbiAgICAgIHN0b3JhZ2U6IGNvbmZpZz8uc3RvcmFnZSB8fCBzdG9yYWdlLFxuICAgICAgYmFzZVJlcXVlc3Q6IGNvbmZpZz8uYmFzZVJlcXVlc3QsXG4gICAgICByZXF1ZXN0OiBjb25maWc/LnJlcXVlc3QsXG4gICAgICBhbm9ueW1vdXNTaWduSW5GdW5jOiBjb25maWc/LmFub255bW91c1NpZ25JbkZ1bmMsXG4gICAgICBjYXB0Y2hhT3B0aW9uczogY29uZmlnPy5jYXB0Y2hhT3B0aW9ucyxcbiAgICB9KVxuXG4gICAgdGhpcy5vYXV0aEluc3RhbmNlID0gb2F1dGhJbnN0YW5jZVxuXG4gICAgdGhpcy5hdXRoSW5zdGFuY2UgPSBuZXcgQXV0aCh7XG4gICAgICBlbnYsXG4gICAgICByZWdpb246IGNvbmZpZy5yZWdpb24sXG4gICAgICBwZXJzaXN0ZW5jZSxcbiAgICAgIGRlYnVnLFxuICAgICAgY2FjaGU6IHRoaXMuY2FjaGUsXG4gICAgICAvLyByZXF1ZXN0OiB0aGlzLnJlcXVlc3QsXG4gICAgICBydW50aW1lLFxuICAgICAgX2Zyb21BcHA6IHRoaXMsXG4gICAgICAvLyBvYXV0aEluc3RhbmNlOiB0aGlzLm9hdXRoSW5zdGFuY2UgfHwgKHRoaXMgYXMgYW55KS5vYXV0aCgpXG4gICAgICBvYXV0aEluc3RhbmNlLFxuICAgIH0pXG5cbiAgICByZXR1cm4gdGhpcy5hdXRoSW5zdGFuY2VcbiAgfSxcbn1cblxudHJ5IHtcbiAgLy8g5bCd6K+V6Ieq5Yqo5rOo5YaM6Iez5YWo5bGA5Y+Y6YePY2xvdWRiYXNlXG4gIC8vIOatpOihjOS4uuWPquWcqOa1j+iniOWZqOeOr+Wig+S4i+acieaViFxuICBjbG91ZGJhc2UucmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50KVxufSBjYXRjaCAoZSkge31cblxuZXhwb3J0IHsgVXNlckluZm8sIEF1dGggfVxuLyoqXG4gKiBAYXBpIOaJi+WKqOazqOWGjOiHs2Nsb3VkYmFzZSBhcHBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQXV0aChhcHA6IFBpY2s8SUNsb3VkYmFzZSwgJ3JlZ2lzdGVyQ29tcG9uZW50Jz4pIHtcbiAgdHJ5IHtcbiAgICBhcHAucmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50KVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS53YXJuKGUpXG4gIH1cbn1cbiJdfQ==
|