New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@cloudbase/oauth

Package Overview
Dependencies
Maintainers
17
Versions
156
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@cloudbase/oauth - npm Package Compare versions

Comparing version 0.0.3-alpha.0 to 0.0.4-alpha.0

6

dist/auth/apis.d.ts

@@ -5,2 +5,3 @@ import { GetVerificationRequest, GetVerificationResponse, UserProfile, UserInfo, SignInRequest, SignUpRequest, VerifyRequest, VerifyResponse, GenProviderRedirectUriRequest, GenProviderRedirectUriResponse, GrantProviderTokenRequest, GrantProviderTokenResponse, PatchProviderTokenRequest, PatchProviderTokenResponse, SignInWithProviderRequest, BindWithProviderRequest, TransByProviderRequest, GrantTokenRequest, UserProfileProvider, UnbindProviderRequest, CheckPasswordrRequest, BindPhoneRequest, SetPasswordRequest, ChangeBindedProviderRequest, ChangeBindedProviderResponse, QueryUserProfileReq } from './models';

import { Credentials } from '../oauth2client/models';
import { ICloudbase } from '@cloudbase/types';
export interface AuthOptions {

@@ -12,2 +13,3 @@ apiOrigin: string;

storage?: SimpleStorage;
_fromApp?: ICloudbase;
}

@@ -20,3 +22,3 @@ export declare class Auth {

protected signUp(params: SignUpRequest): Promise<Credentials>;
signOut(): Promise<void>;
signOut(): Promise<any>;
getVerification(params: GetVerificationRequest): Promise<GetVerificationResponse>;

@@ -32,2 +34,4 @@ verify(params: VerifyRequest): Promise<VerifyResponse>;

hasLoginState(): Promise<boolean>;
hasLoginStateSync(): Credentials | null;
getLoginState(): Promise<Credentials | null>;
transByProvider(params: TransByProviderRequest): Promise<Credentials>;

@@ -34,0 +38,0 @@ grantToken(params: GrantTokenRequest): Promise<Credentials>;

@@ -265,7 +265,22 @@ 'use strict';

return __awaiter(this, void 0, void 0, function () {
var userInfo;
return __generator(this, function (_a) {
return [2, this._config.request(consts_1.ApiUrls.USER_ME_URL, {
method: 'GET',
withCredentials: true,
})];
switch (_a.label) {
case 0: return [4, this._config.request(consts_1.ApiUrls.USER_ME_URL, {
method: 'GET',
withCredentials: true,
})];
case 1:
userInfo = _a.sent();
if (userInfo.picture) {
userInfo.avatarUrl = userInfo.picture;
}
if (userInfo.sub) {
userInfo.uid = userInfo.sub;
}
if (userInfo.name) {
userInfo.username = userInfo.name;
}
return [2, userInfo];
}
});

@@ -293,2 +308,13 @@ });

};
Auth.prototype.hasLoginStateSync = function () {
var credentials = this._config.credentialsClient.getCredentialsSync();
return credentials;
};
Auth.prototype.getLoginState = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2, this._config.credentialsClient.getCredentialsAsync()];
});
});
};
Auth.prototype.transByProvider = function (params) {

@@ -424,2 +450,2 @@ return __awaiter(this, void 0, void 0, function () {

exports.Auth = Auth;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRoL2FwaXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFYixtQ0FBaUM7QUE4QmpDLDZEQUEwRTtBQUUxRSw4Q0FBMkM7QUFhM0M7SUFPSSxjQUFZLElBQWlCO1FBQ3pCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDM0IsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQzFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDZixJQUFNLFdBQVcsR0FBRztnQkFDaEIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN6QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTzthQUN4QixDQUFDO1lBQ0YsWUFBWSxHQUFHLElBQUksMkJBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNoRDtRQUNELElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDVixJQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM1RCxJQUFNLE9BQU8sR0FBRyxJQUFJLGlCQUFPLENBQUM7Z0JBQ3hCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsT0FBTyxFQUFFLFdBQVc7Z0JBQ3BCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTzthQUN4QixDQUFDLENBQUE7WUFDRixPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7U0FDMUM7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ1gsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixPQUFPLEVBQUUsT0FBTztZQUNoQixpQkFBaUIsRUFBRSxZQUFZO1lBQy9CLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxJQUFJLDZCQUFjO1NBQzFDLENBQUM7SUFDTixDQUFDO0lBT1kscUJBQU0sR0FBbkIsVUFBb0IsTUFBcUI7Ozs7Ozt3QkFDckMsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQzt3QkFDUixXQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUN2RCxnQkFBTyxDQUFDLGdCQUFnQixFQUN4QjtnQ0FDSSxNQUFNLEVBQUUsTUFBTTtnQ0FDZCxJQUFJLEVBQUUsTUFBTTs2QkFDZixDQUNKLEVBQUE7O3dCQU5LLFdBQVcsR0FBZ0IsU0FNaEM7d0JBQ0QsV0FBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFBQTs7d0JBQWhFLFNBQWdFLENBQUM7d0JBQ2pFLFdBQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBQzs7OztLQUN2QztJQU1ZLGdDQUFpQixHQUE5Qjs7Ozs7NEJBQ3FDLFdBQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ3ZELGdCQUFPLENBQUMsNEJBQTRCLEVBQ3BDOzRCQUNJLE1BQU0sRUFBRSxNQUFNOzRCQUNkLElBQUksRUFBRTtnQ0FDRixTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFROzZCQUNuQzt5QkFDSixDQUNKLEVBQUE7O3dCQVJLLFdBQVcsR0FBZ0IsU0FRaEM7d0JBQ0QsV0FBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFBQTs7d0JBQWhFLFNBQWdFLENBQUM7d0JBQ2pFLFdBQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBQzs7OztLQUN2QztJQU9lLHFCQUFNLEdBQXRCLFVBQXVCLE1BQXFCOzs7Ozs7d0JBQ3hDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7d0JBQ2YsV0FBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FDaEQsZ0JBQU8sQ0FBQyxnQkFBZ0IsRUFDeEI7Z0NBQ0ksTUFBTSxFQUFFLE1BQU07Z0NBQ2QsSUFBSSxFQUFFLE1BQU07NkJBQ2YsQ0FDSixFQUFBOzt3QkFOSyxJQUFJLEdBQWdCLFNBTXpCO3dCQUNELFdBQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUE7O3dCQUF6RCxTQUF5RCxDQUFDO3dCQUMxRCxXQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUM7Ozs7S0FDaEM7SUFNWSxzQkFBTyxHQUFwQjs7Ozs7NEJBQ2dDLFdBQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsRUFBQTs7d0JBQTNFLFdBQVcsR0FBVyxTQUFxRDt3QkFDcEUsV0FBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBTyxnQkFBTyxDQUFDLGVBQWUsRUFBRTtnQ0FDbkUsTUFBTSxFQUFFLE1BQU07Z0NBQ2QsSUFBSSxFQUFFO29DQUNGLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVE7b0NBQ2hDLEtBQUssRUFBRSxXQUFXO2lDQUNyQjs2QkFDSixDQUFDLEVBQUE7O3dCQU5JLElBQUksR0FBRyxTQU1YO3dCQUNGLFdBQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsRUFBQTs7d0JBQXJELFNBQXFELENBQUM7d0JBQ3RELFdBQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBQzs7OztLQUNoQztJQU9ZLDhCQUFlLEdBQTVCLFVBQ0ksTUFBOEI7OztnQkFFOUIsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDekMsV0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FDdkIsZ0JBQU8sQ0FBQyxnQkFBZ0IsRUFDeEI7d0JBQ0ksTUFBTSxFQUFFLE1BQU07d0JBQ2QsSUFBSSxFQUFFLE1BQU07d0JBQ1osV0FBVyxFQUFFLElBQUk7cUJBQ3BCLENBQ0osRUFBQzs7O0tBQ0w7SUFPWSxxQkFBTSxHQUFuQixVQUFvQixNQUFxQjs7O2dCQUNyQyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO2dCQUN6QyxXQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFpQixnQkFBTyxDQUFDLFVBQVUsRUFBRTt3QkFDNUQsTUFBTSxFQUFFLE1BQU07d0JBQ2QsSUFBSSxFQUFFLE1BQU07cUJBQ2YsQ0FBQyxFQUFDOzs7S0FDTjtJQU9ZLHFDQUFzQixHQUFuQyxVQUNJLE1BQXFDOzs7O2dCQUVqQyxHQUFHLEdBQU0sZ0JBQU8sQ0FBQyxnQkFBZ0IsbUJBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxxQkFDVCxNQUFNLENBQUMsV0FBVyxzQkFBaUIsa0JBQWtCLENBQ2pFLE1BQU0sQ0FBQyxxQkFBcUIsQ0FDL0IsZUFBVSxNQUFNLENBQUMsS0FBTyxDQUFDO2dCQUNwQixZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztnQkFDekMsSUFBSSxZQUFZLEVBQUU7b0JBQ2QsSUFDSSxPQUFPLFlBQVksQ0FBQyxZQUFZLEtBQUssUUFBUTt3QkFDN0MsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUN0Qzt3QkFDRSxHQUFHLElBQUksaUNBQStCLFlBQVksQ0FBQyxZQUFjLENBQUM7cUJBQ3JFO2lCQUNKO2dCQUNELFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQWlDLEdBQUcsRUFBRTt3QkFDN0QsTUFBTSxFQUFFLEtBQUs7cUJBQ2hCLENBQUMsRUFBQzs7O0tBQ047SUFPWSxpQ0FBa0IsR0FBL0IsVUFDSSxNQUFpQzs7O2dCQUVqQyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO2dCQUN6QyxXQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUN2QixnQkFBTyxDQUFDLGtCQUFrQixFQUMxQjt3QkFDSSxNQUFNLEVBQUUsTUFBTTt3QkFDZCxJQUFJLEVBQUUsTUFBTTtxQkFDZixDQUNKLEVBQUM7OztLQUNMO0lBT1ksaUNBQWtCLEdBQS9CLFVBQ0ksTUFBaUM7OztnQkFFakMsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDekMsV0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FDdkIsZ0JBQU8sQ0FBQyxrQkFBa0IsRUFDMUI7d0JBQ0ksTUFBTSxFQUFFLE9BQU87d0JBQ2YsSUFBSSxFQUFFLE1BQU07cUJBQ2YsQ0FDSixFQUFDOzs7S0FDTDtJQU9ZLGlDQUFrQixHQUEvQixVQUNJLE1BQWlDOzs7Ozs7d0JBRWpDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7d0JBQ1IsV0FBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FDdkQsZ0JBQU8sQ0FBQyw4QkFBOEIsRUFDdEM7Z0NBQ0ksTUFBTSxFQUFFLE1BQU07Z0NBQ2QsSUFBSSxFQUFFLE1BQU07NkJBQ2YsQ0FDSixFQUFBOzt3QkFOSyxXQUFXLEdBQWdCLFNBTWhDO3dCQUNELFdBQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEVBQUE7O3dCQUFoRSxTQUFnRSxDQUFDO3dCQUNqRSxXQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUM7Ozs7S0FDdkM7SUFPWSwrQkFBZ0IsR0FBN0IsVUFDSSxNQUErQjs7O2dCQUUvQixNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO2dCQUN6QyxXQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFNLGdCQUFPLENBQUMsaUJBQWlCLEVBQUU7d0JBQ3hELE1BQU0sRUFBRSxNQUFNO3dCQUNkLElBQUksRUFBRSxNQUFNO3dCQUNaLGVBQWUsRUFBRSxJQUFJO3FCQUN4QixDQUFDLEVBQUM7OztLQUNOO0lBTVksNkJBQWMsR0FBM0I7OztnQkFDSSxXQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBQzs7O0tBQzdCO0lBTVksMEJBQVcsR0FBeEI7OztnQkFDSSxXQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFXLGdCQUFPLENBQUMsV0FBVyxFQUFFO3dCQUN2RCxNQUFNLEVBQUUsS0FBSzt3QkFDYixlQUFlLEVBQUUsSUFBSTtxQkFDeEIsQ0FBQyxFQUFDOzs7S0FDTjtJQU1ZLDRCQUFhLEdBQTFCOzs7Ozs7O3dCQUVRLFdBQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsRUFBQTs7d0JBQXJELFNBQXFELENBQUE7d0JBQ3JELFdBQU8sSUFBSSxFQUFBOzs7d0JBRVgsV0FBTyxLQUFLLEVBQUE7Ozs7O0tBRW5CO0lBT1ksOEJBQWUsR0FBNUIsVUFDSSxNQUE4Qjs7O2dCQUU5QixXQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUN2QixnQkFBTyxDQUFDLDBCQUEwQixFQUNsQzt3QkFDSSxNQUFNLEVBQUUsT0FBTzt3QkFDZixJQUFJLEVBQUUsTUFBTTt3QkFDWixlQUFlLEVBQUUsSUFBSTtxQkFDeEIsQ0FDSixFQUFDOzs7S0FDTDtJQU9ZLHlCQUFVLEdBQXZCLFVBQXdCLE1BQXlCOzs7Z0JBQzdDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7Z0JBQ3pDLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQWMsZ0JBQU8sQ0FBQyxjQUFjLEVBQUU7d0JBQzdELE1BQU0sRUFBRSxNQUFNO3dCQUNkLElBQUksRUFBRSxNQUFNO3FCQUNmLENBQUMsRUFBQzs7O0tBQ047SUFNWSwyQkFBWSxHQUF6Qjs7O2dCQUNJLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQXNCLGdCQUFPLENBQUMsYUFBYSxFQUFFO3dCQUNwRSxNQUFNLEVBQUUsS0FBSzt3QkFDYixlQUFlLEVBQUUsSUFBSTtxQkFDeEIsQ0FBQyxFQUFDOzs7S0FDTjtJQU9ZLDZCQUFjLEdBQTNCLFVBQTRCLE1BQTZCOzs7Z0JBQ3JELE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7Z0JBQ3pDLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ3BCLGdCQUFPLENBQUMsbUJBQW1CLFNBQUksTUFBTSxDQUFDLFdBQWEsRUFDdEQ7d0JBQ0ksTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGVBQWUsRUFBRSxJQUFJO3FCQUN4QixDQUNKLEVBQUM7OztLQUNMO0lBT1ksNEJBQWEsR0FBMUIsVUFBMkIsTUFBNkI7OztnQkFDcEQsV0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBTSxLQUFHLGdCQUFPLENBQUMsYUFBZSxFQUFFO3dCQUN6RCxNQUFNLEVBQUUsTUFBTTt3QkFDZCxlQUFlLEVBQUUsSUFBSTt3QkFDckIsSUFBSSxFQUFFLE1BQU07cUJBQ2YsQ0FBQyxFQUFDOzs7S0FDTjtJQU9ZLHdCQUFTLEdBQXRCLFVBQXVCLE1BQXdCOzs7Z0JBQzNDLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQU0sS0FBRyxnQkFBTyxDQUFDLGNBQWdCLEVBQUU7d0JBQzFELE1BQU0sRUFBRSxPQUFPO3dCQUNmLGVBQWUsRUFBRSxJQUFJO3dCQUNyQixJQUFJLEVBQUUsTUFBTTtxQkFDZixDQUFDLEVBQUM7OztLQUNOO0lBT1ksMEJBQVcsR0FBeEIsVUFBeUIsTUFBMEI7OztnQkFDL0MsV0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBTSxLQUFHLGdCQUFPLENBQUMsaUJBQW1CLEVBQUU7d0JBQzdELE1BQU0sRUFBRSxPQUFPO3dCQUNmLGVBQWUsRUFBRSxJQUFJO3dCQUNyQixJQUFJLEVBQUUsTUFBTTtxQkFDZixDQUFDLEVBQUM7OztLQUNOO0lBT1kscUNBQXNCLEdBQW5DLFVBQ0ksTUFBOEI7OztnQkFFOUIsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDekMsTUFBTSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUM7Z0JBQzNCLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ3ZCLGdCQUFPLENBQUMsZ0JBQWdCLEVBQ3hCO3dCQUNJLE1BQU0sRUFBRSxNQUFNO3dCQUNkLElBQUksRUFBRSxNQUFNO3dCQUNaLGVBQWUsRUFBRSxJQUFJO3dCQUNyQixXQUFXLEVBQUUsSUFBSTtxQkFDcEIsQ0FDSixFQUFDOzs7S0FDTDtJQU9ZLG1DQUFvQixHQUFqQyxVQUNJLE1BQW1DOzs7Z0JBRW5DLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7Z0JBQ3pDLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ3BCLGdCQUFPLENBQUMsYUFBYSxTQUFJLE1BQU0sQ0FBQyxXQUFXLFdBQVEsRUFDdEQ7d0JBQ0ksTUFBTSxFQUFFLE1BQU07d0JBQ2QsSUFBSSxFQUFFOzRCQUNGLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxXQUFXO3lCQUMzQzt3QkFDRCxlQUFlLEVBQUUsSUFBSTtxQkFDeEIsQ0FDSixFQUFDOzs7S0FDTDtJQU9ZLDZCQUFjLEdBQTNCLFVBQTRCLE1BQW1COzs7Z0JBQzNDLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQWMsZ0JBQU8sQ0FBQyxnQkFBZ0IsRUFBRTt3QkFDL0QsTUFBTSxFQUFFLE9BQU87d0JBQ2YsSUFBSSxFQUFFLE1BQU07d0JBQ1osZUFBZSxFQUFFLElBQUk7cUJBQ3hCLENBQUMsRUFBQzs7O0tBQ047SUFPWSwrQkFBZ0IsR0FBN0IsVUFDSSxlQUFvQzs7OztnQkFFOUIsR0FBRyxHQUFHLEtBQUcsZ0JBQU8sQ0FBQyxjQUFjLEdBQUcsZUFBaUIsQ0FBQztnQkFDMUQsV0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBYyxHQUFHLEVBQUU7d0JBQzFDLE1BQU0sRUFBRSxLQUFLO3dCQUNiLGVBQWUsRUFBRSxJQUFJO3FCQUN4QixDQUFDLEVBQUM7OztLQUNOO0lBQ0wsV0FBQztBQUFELENBQUMsQUFwYkQsSUFvYkM7QUFwYlksb0JBQUkiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7QXBpVXJsc30gZnJvbSAnLi9jb25zdHMnO1xuaW1wb3J0IHtcbiAgICBHZXRWZXJpZmljYXRpb25SZXF1ZXN0LFxuICAgIEdldFZlcmlmaWNhdGlvblJlc3BvbnNlLFxuICAgIFVzZXJQcm9maWxlLFxuICAgIFVzZXJJbmZvLFxuICAgIFNpZ25JblJlcXVlc3QsXG4gICAgU2lnblVwUmVxdWVzdCxcbiAgICBWZXJpZnlSZXF1ZXN0LFxuICAgIFZlcmlmeVJlc3BvbnNlLFxuICAgIEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXF1ZXN0LFxuICAgIEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXNwb25zZSxcbiAgICBHcmFudFByb3ZpZGVyVG9rZW5SZXF1ZXN0LFxuICAgIEdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlLFxuICAgIFBhdGNoUHJvdmlkZXJUb2tlblJlcXVlc3QsXG4gICAgUGF0Y2hQcm92aWRlclRva2VuUmVzcG9uc2UsXG4gICAgU2lnbkluV2l0aFByb3ZpZGVyUmVxdWVzdCxcbiAgICBCaW5kV2l0aFByb3ZpZGVyUmVxdWVzdCxcbiAgICBUcmFuc0J5UHJvdmlkZXJSZXF1ZXN0LFxuICAgIEdyYW50VG9rZW5SZXF1ZXN0LFxuICAgIFVzZXJQcm9maWxlUHJvdmlkZXIsXG4gICAgVW5iaW5kUHJvdmlkZXJSZXF1ZXN0LFxuICAgIENoZWNrUGFzc3dvcmRyUmVxdWVzdCxcbiAgICBCaW5kUGhvbmVSZXF1ZXN0LFxuICAgIFNldFBhc3N3b3JkUmVxdWVzdCxcbiAgICBDaGFuZ2VCaW5kZWRQcm92aWRlclJlcXVlc3QsXG4gICAgQ2hhbmdlQmluZGVkUHJvdmlkZXJSZXNwb25zZSxcbiAgICBRdWVyeVVzZXJQcm9maWxlUmVxLFxufSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQge1NpbXBsZVN0b3JhZ2UsIFJlcXVlc3RGdW5jdGlvbn0gZnJvbSAnLi4vb2F1dGgyY2xpZW50L2ludGVyZmFjZSc7XG5pbXBvcnQge09BdXRoMkNsaWVudCwgZGVmYXVsdFN0b3JhZ2V9IGZyb20gJy4uL29hdXRoMmNsaWVudC9vYXV0aDJjbGllbnQnO1xuaW1wb3J0IHtDcmVkZW50aWFsc30gZnJvbSAnLi4vb2F1dGgyY2xpZW50L21vZGVscyc7XG5pbXBvcnQge0NhcHRjaGF9IGZyb20gJy4uL2NhcHRjaGEvY2FwdGNoYSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aE9wdGlvbnMge1xuICAgIGFwaU9yaWdpbjogc3RyaW5nO1xuICAgIGNsaWVudElkOiBzdHJpbmc7XG4gICAgY3JlZGVudGlhbHNDbGllbnQ/OiBPQXV0aDJDbGllbnQ7XG4gICAgcmVxdWVzdD86IFJlcXVlc3RGdW5jdGlvbjtcbiAgICBzdG9yYWdlPzogU2ltcGxlU3RvcmFnZTtcbn1cblxuLyoqXG4gKiBBdXRoXG4gKi9cbmV4cG9ydCBjbGFzcyBBdXRoIHtcbiAgICBwcml2YXRlIF9jb25maWc6IEF1dGhPcHRpb25zO1xuXG4gICAgLyoqXG4gICAgICogY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge0F1dGhPcHRpb25zfSBvcHRzXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3B0czogQXV0aE9wdGlvbnMpIHtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSBvcHRzLnJlcXVlc3Q7XG4gICAgICAgIGxldCBvQXV0aDJDbGllbnQgPSBvcHRzLmNyZWRlbnRpYWxzQ2xpZW50O1xuICAgICAgICBpZiAoIW9BdXRoMkNsaWVudCkge1xuICAgICAgICAgICAgY29uc3QgaW5pdE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgYXBpT3JpZ2luOiBvcHRzLmFwaU9yaWdpbixcbiAgICAgICAgICAgICAgICBjbGllbnRJZDogb3B0cy5jbGllbnRJZCxcbiAgICAgICAgICAgICAgICBzdG9yYWdlOiBvcHRzLnN0b3JhZ2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgb0F1dGgyQ2xpZW50ID0gbmV3IE9BdXRoMkNsaWVudChpbml0T3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlUmVxdWVzdCA9IG9BdXRoMkNsaWVudC5yZXF1ZXN0LmJpbmQob0F1dGgyQ2xpZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGNhcHRjaGEgPSBuZXcgQ2FwdGNoYSh7XG4gICAgICAgICAgICAgICAgY2xpZW50SWQ6IG9wdHMuY2xpZW50SWQsXG4gICAgICAgICAgICAgICAgcmVxdWVzdDogYmFzZVJlcXVlc3QsXG4gICAgICAgICAgICAgICAgc3RvcmFnZTogb3B0cy5zdG9yYWdlLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJlcXVlc3QgPSBjYXB0Y2hhLnJlcXVlc3QuYmluZChjYXB0Y2hhKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IHtcbiAgICAgICAgICAgIGFwaU9yaWdpbjogb3B0cy5hcGlPcmlnaW4sXG4gICAgICAgICAgICBjbGllbnRJZDogb3B0cy5jbGllbnRJZCxcbiAgICAgICAgICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgICAgICAgICBjcmVkZW50aWFsc0NsaWVudDogb0F1dGgyQ2xpZW50LFxuICAgICAgICAgICAgc3RvcmFnZTogb3B0cy5zdG9yYWdlIHx8IGRlZmF1bHRTdG9yYWdlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNpZ24gaW4uXG4gICAgICogQHBhcmFtIHtTaWduSW5SZXF1ZXN0fSBwYXJhbXMgQSBTaWduSW5SZXF1ZXN0IE9iamVjdC5cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn0gQSBQcm9taXNlPENyZWRlbnRpYWxzPiBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIHNpZ25JbihwYXJhbXM6IFNpZ25JblJlcXVlc3QpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgICAgIHBhcmFtcy5jbGllbnRfaWQgPSB0aGlzLl9jb25maWcuY2xpZW50SWQ7XG4gICAgICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuX2NvbmZpZy5yZXF1ZXN0PENyZWRlbnRpYWxzPihcbiAgICAgICAgICAgIEFwaVVybHMuQVVUSF9TSUdOX0lOX1VSTCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICBib2R5OiBwYXJhbXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHRoaXMuX2NvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscyk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlZGVudGlhbHMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNpZ24gaW4gQW5vbnltb3VzbHlcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn0gQSBQcm9taXNlPENyZWRlbnRpYWxzPiBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIHNpZ25JbkFub255bW91c2x5KCk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICAgICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5fY29uZmlnLnJlcXVlc3Q8Q3JlZGVudGlhbHM+KFxuICAgICAgICAgICAgQXBpVXJscy5BVVRIX1NJR05fSU5fQU5PTllNT1VTTFlfVVJMLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpZW50X2lkOiB0aGlzLl9jb25maWcuY2xpZW50SWRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLl9jb25maWcuY3JlZGVudGlhbHNDbGllbnQuc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHMpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWRlbnRpYWxzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaWduIHVwLlxuICAgICAqIEBwYXJhbSB7U2lnblVwUmVxdWVzdH0gcGFyYW1zIEEgU2lnblVwUmVxdWVzdCBPYmplY3QuXG4gICAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59IEEgUHJvbWlzZTxDcmVkZW50aWFscz4gb2JqZWN0LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhc3luYyBzaWduVXAocGFyYW1zOiBTaWduVXBSZXF1ZXN0KTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgICAgICBwYXJhbXMuY2xpZW50X2lkID0gdGhpcy5fY29uZmlnLmNsaWVudElkO1xuICAgICAgICBjb25zdCBkYXRhOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuX2NvbmZpZy5yZXF1ZXN0PENyZWRlbnRpYWxzPihcbiAgICAgICAgICAgIEFwaVVybHMuQVVUSF9TSUdOX1VQX1VSTCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICBib2R5OiBwYXJhbXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLl9jb25maWcuY3JlZGVudGlhbHNDbGllbnQuc2V0Q3JlZGVudGlhbHMoZGF0YSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2lnbiBvdXQuXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBBIFByb21pc2U8dm9pZD4gb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyBzaWduT3V0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbjogc3RyaW5nID0gYXdhaXQgdGhpcy5fY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LmdldEFjY2Vzc1Rva2VuKCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLl9jb25maWcucmVxdWVzdDx2b2lkPihBcGlVcmxzLkFVVEhfUkVWT0tFX1VSTCwge1xuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICAgICAgY2xpZW50X2lkOiB0aGlzLl9jb25maWcuY2xpZW50SWQsXG4gICAgICAgICAgICAgICAgdG9rZW46IGFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHRoaXMuX2NvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5zZXRDcmVkZW50aWFscygpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgdmVyaWZpY2F0aW9uLlxuICAgICAqIEBwYXJhbSB7R2V0VmVyaWZpY2F0aW9uUmVxdWVzdH0gcGFyYW1zIEEgR2V0VmVyaWZpY2F0aW9uUmVxdWVzdCBPYmplY3QuXG4gICAgICogQHJldHVybiB7UHJvbWlzZTxHZXRWZXJpZmljYXRpb25SZXNwb25zZT59IEEgUHJvbWlzZTxHZXRWZXJpZmljYXRpb25SZXNwb25zZT4gb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyBnZXRWZXJpZmljYXRpb24oXG4gICAgICAgIHBhcmFtczogR2V0VmVyaWZpY2F0aW9uUmVxdWVzdCxcbiAgICApOiBQcm9taXNlPEdldFZlcmlmaWNhdGlvblJlc3BvbnNlPiB7XG4gICAgICAgIHBhcmFtcy5jbGllbnRfaWQgPSB0aGlzLl9jb25maWcuY2xpZW50SWQ7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcucmVxdWVzdDxHZXRWZXJpZmljYXRpb25SZXNwb25zZT4oXG4gICAgICAgICAgICBBcGlVcmxzLlZFUklGSUNBVElPTl9VUkwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgICAgICAgICAgIHdpdGhDYXB0Y2hhOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBWZXJpZnkgdGhlIGNvZGVcbiAgICAgKiBAcGFyYW0ge1ZlcmlmeVJlcXVlc3R9IHBhcmFtcyBBIFZlcmlmeVJlcXVlc3QgT2JqZWN0LlxuICAgICAqIEByZXR1cm4ge1Byb21pc2U8VmVyaWZ5UmVzcG9uc2U+fSBBIFByb21pc2U8VmVyaWZ5UmVzcG9uc2U+IG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgdmVyaWZ5KHBhcmFtczogVmVyaWZ5UmVxdWVzdCk6IFByb21pc2U8VmVyaWZ5UmVzcG9uc2U+IHtcbiAgICAgICAgcGFyYW1zLmNsaWVudF9pZCA9IHRoaXMuX2NvbmZpZy5jbGllbnRJZDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5yZXF1ZXN0PFZlcmlmeVJlc3BvbnNlPihBcGlVcmxzLlZFUklGWV9VUkwsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZW4gcHJvdmlkZXIgcmVkaXJlY3QgdXJpLlxuICAgICAqIEBwYXJhbSB7R2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlcXVlc3R9IHBhcmFtcyBBIEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXF1ZXN0IG9iamVjdC5cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXNwb25zZT59IEEgUHJvbWlzZTxHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVzcG9uc2U+IG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgZ2VuUHJvdmlkZXJSZWRpcmVjdFVyaShcbiAgICAgICAgcGFyYW1zOiBHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVxdWVzdCxcbiAgICApOiBQcm9taXNlPEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXNwb25zZT4ge1xuICAgICAgICBsZXQgdXJsID0gYCR7QXBpVXJscy5QUk9WSURFUl9VUklfVVJMfT9jbGllbnRfaWQ9JHtcbiAgICAgICAgICAgIHRoaXMuX2NvbmZpZy5jbGllbnRJZFxuICAgICAgICB9JnByb3ZpZGVyX2lkPSR7cGFyYW1zLnByb3ZpZGVyX2lkfSZyZWRpcmVjdF91cmk9JHtlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICAgICAgICBwYXJhbXMucHJvdmlkZXJfcmVkaXJlY3RfdXJpLFxuICAgICAgICApfSZzdGF0ZT0ke3BhcmFtcy5zdGF0ZX1gO1xuICAgICAgICBjb25zdCBvdGhlcl9wYXJhbXMgPSBwYXJhbXMub3RoZXJfcGFyYW1zO1xuICAgICAgICBpZiAob3RoZXJfcGFyYW1zKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdHlwZW9mIG90aGVyX3BhcmFtcy5zaWduX291dF91cmkgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgb3RoZXJfcGFyYW1zLnNpZ25fb3V0X3VyaS5sZW5ndGggPiAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB1cmwgKz0gYCZvdGhlcl9wYXJhbXNbc2lnbl9vdXRfdXJpXT0ke290aGVyX3BhcmFtcy5zaWduX291dF91cml9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLnJlcXVlc3Q8R2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlc3BvbnNlPih1cmwsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdyYW50IHByb3ZpZGVyIHRva2VuLlxuICAgICAqIEBwYXJhbSB7R3JhbnRQcm92aWRlclRva2VuUmVxdWVzdH0gcGFyYW1zIEEgR3JhbnRQcm92aWRlclRva2VuUmVxdWVzdCBvYmplY3QuXG4gICAgICogQHJldHVybiB7UHJvbWlzZTxHcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZT59IEEgUHJvbWlzZTxHcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZT4gb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyBncmFudFByb3ZpZGVyVG9rZW4oXG4gICAgICAgIHBhcmFtczogR3JhbnRQcm92aWRlclRva2VuUmVxdWVzdCxcbiAgICApOiBQcm9taXNlPEdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlPiB7XG4gICAgICAgIHBhcmFtcy5jbGllbnRfaWQgPSB0aGlzLl9jb25maWcuY2xpZW50SWQ7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcucmVxdWVzdDxHcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZT4oXG4gICAgICAgICAgICBBcGlVcmxzLlBST1ZJREVSX1RPS0VOX1VSTCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICBib2R5OiBwYXJhbXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdyYW50IHByb3ZpZGVyIHRva2VuLlxuICAgICAqIEBwYXJhbSB7UGF0Y2hQcm92aWRlclRva2VuUmVxdWVzdH0gcGFyYW1zIEEgUGF0Y2hQcm92aWRlclRva2VuUmVxdWVzdCBvYmplY3QuXG4gICAgICogQHJldHVybiB7UHJvbWlzZTxQYXRjaFByb3ZpZGVyVG9rZW5SZXNwb25zZT59IEEgUHJvbWlzZTxQYXRjaFByb3ZpZGVyVG9rZW5SZXNwb25zZT4gb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyBwYXRjaFByb3ZpZGVyVG9rZW4oXG4gICAgICAgIHBhcmFtczogUGF0Y2hQcm92aWRlclRva2VuUmVxdWVzdCxcbiAgICApOiBQcm9taXNlPFBhdGNoUHJvdmlkZXJUb2tlblJlc3BvbnNlPiB7XG4gICAgICAgIHBhcmFtcy5jbGllbnRfaWQgPSB0aGlzLl9jb25maWcuY2xpZW50SWQ7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcucmVxdWVzdDxQYXRjaFByb3ZpZGVyVG9rZW5SZXNwb25zZT4oXG4gICAgICAgICAgICBBcGlVcmxzLlBST1ZJREVSX1RPS0VOX1VSTCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICAgICAgICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaWduaW4gd2l0aCBwcm92aWRlciByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSB7U2lnbkluV2l0aFByb3ZpZGVyUmVxdWVzdH0gcGFyYW1zIEEgU2lnbkluV2l0aFByb3ZpZGVyUmVxdWVzdCBvYmplY3QuXG4gICAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59IEEgUHJvbWlzZTxDcmVkZW50aWFscz4gb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoUHJvdmlkZXIoXG4gICAgICAgIHBhcmFtczogU2lnbkluV2l0aFByb3ZpZGVyUmVxdWVzdCxcbiAgICApOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgICAgIHBhcmFtcy5jbGllbnRfaWQgPSB0aGlzLl9jb25maWcuY2xpZW50SWQ7XG4gICAgICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuX2NvbmZpZy5yZXF1ZXN0PENyZWRlbnRpYWxzPihcbiAgICAgICAgICAgIEFwaVVybHMuQVVUSF9TSUdOX0lOX1dJVEhfUFJPVklERVJfVVJMLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHRoaXMuX2NvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscyk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlZGVudGlhbHMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJpbmQgd2l0aCBwcm92aWRlclxuICAgICAqIEBwYXJhbSB7QmluZFdpdGhQcm92aWRlclJlcXVlc3R9IHBhcmFtcyBBIEJpbmRXaXRoUHJvdmlkZXJSZXF1ZXN0IG9iamVjdC5cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIFByb21pc2U8YW55PiBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIGJpbmRXaXRoUHJvdmlkZXIoXG4gICAgICAgIHBhcmFtczogQmluZFdpdGhQcm92aWRlclJlcXVlc3QsXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHBhcmFtcy5jbGllbnRfaWQgPSB0aGlzLl9jb25maWcuY2xpZW50SWQ7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcucmVxdWVzdDxhbnk+KEFwaVVybHMuUFJPVklERVJfQklORF9VUkwsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHVzZXIgcHJvZmlsZS5cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPFVzZXJQcm9maWxlPn0gQSBQcm9taXNlPFVzZXJQcm9maWxlPiBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIGdldFVzZXJQcm9maWxlKCk6IFByb21pc2U8VXNlclByb2ZpbGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VXNlckluZm8oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHVzZXIgaW5mby5cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPFVzZXJJbmZvPn0gQSBQcm9taXNlPFVzZXJQcm9maWxlPiBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIGdldFVzZXJJbmZvKCk6IFByb21pc2U8VXNlckluZm8+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5yZXF1ZXN0PFVzZXJJbmZvPihBcGlVcmxzLlVTRVJfTUVfVVJMLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBoYXNMb2dpblN0YXRlIGNoZWNrIGlmIGhhcyBsb2dpbiBzdGF0ZVxuICAgICAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbj59IEEgUHJvbWlzZTxib29sZWFuPiBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIGhhc0xvZ2luU3RhdGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9jb25maWcuY3JlZGVudGlhbHNDbGllbnQuZ2V0QWNjZXNzVG9rZW4oKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnMgYnkgcHJvdmlkZXIuXG4gICAgICogQHBhcmFtIHtUcmFuc0J5UHJvdmlkZXJSZXF1ZXN0fSBwYXJhbXMgQSBUcmFuc0J5UHJvdmlkZXJSZXF1ZXN0IG9iamVjdC5cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn0gQSBQcm9taXNlPENyZWRlbnRpYWxzPiBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIHRyYW5zQnlQcm92aWRlcihcbiAgICAgICAgcGFyYW1zOiBUcmFuc0J5UHJvdmlkZXJSZXF1ZXN0LFxuICAgICk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5yZXF1ZXN0PENyZWRlbnRpYWxzPihcbiAgICAgICAgICAgIEFwaVVybHMuVVNFUl9UUkFOU19CWV9QUk9WSURFUl9VUkwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUEFUQ0gnLFxuICAgICAgICAgICAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdyYW50IHRva2VuLlxuICAgICAqIEBwYXJhbSB7R3JhbnRUb2tlblJlcXVlc3R9IHBhcmFtcyBBIEdyYW50VG9rZW5SZXF1ZXN0IG9iamVjdC5cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn0gQSBQcm9taXNlPENyZWRlbnRpYWxzPiBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIGdyYW50VG9rZW4ocGFyYW1zOiBHcmFudFRva2VuUmVxdWVzdCk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICAgICAgcGFyYW1zLmNsaWVudF9pZCA9IHRoaXMuX2NvbmZpZy5jbGllbnRJZDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5yZXF1ZXN0PENyZWRlbnRpYWxzPihBcGlVcmxzLkFVVEhfVE9LRU5fVVJMLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBwcm92aWRlIGxpc3QuXG4gICAgICogQHJldHVybiB7UHJvbWlzZTxVc2VyUHJvZmlsZVByb3ZpZGVyPn0gQSBQcm9taXNlPFVzZXJQcm9maWxlUHJvdmlkZXI+IG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgZ2V0UHJvdmlkZXJzKCk6IFByb21pc2U8VXNlclByb2ZpbGVQcm92aWRlcj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLnJlcXVlc3Q8VXNlclByb2ZpbGVQcm92aWRlcj4oQXBpVXJscy5QUk9WSURFUl9MSVNULCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB1bmJpbmQgcHJvdmlkZXIuXG4gICAgICogQHBhcmFtIHtVbmJpbmRQcm92aWRlclJlcXVlc3R9IHBhcmFtc1xuICAgICAqIEByZXR1cm4ge1Byb21pc2U8YW55Pn1cbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgdW5iaW5kUHJvdmlkZXIocGFyYW1zOiBVbmJpbmRQcm92aWRlclJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcGFyYW1zLmNsaWVudF9pZCA9IHRoaXMuX2NvbmZpZy5jbGllbnRJZDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5yZXF1ZXN0PGFueT4oXG4gICAgICAgICAgICBgJHtBcGlVcmxzLlBST1ZJREVSX1VOQklORF9VUkx9LyR7cGFyYW1zLnByb3ZpZGVyX2lkfWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNoZWNrIFBhc3N3b3JkLlxuICAgICAqIEBwYXJhbSB7Q2hlY2tQYXNzd29yZHJSZXF1ZXN0fSBwYXJhbXNcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGFueT59XG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIGNoZWNrUGFzc3dvcmQocGFyYW1zOiBDaGVja1Bhc3N3b3JkclJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5yZXF1ZXN0PGFueT4oYCR7QXBpVXJscy5DSEVDS19QV0RfVVJMfWAsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjaGVjayBQYXNzd29yZC5cbiAgICAgKiBAcGFyYW0ge0NoZWNrUGFzc3dvcmRyUmVxdWVzdH0gcGFyYW1zXG4gICAgICogQHJldHVybiB7UHJvbWlzZTxhbnk+fVxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyBiaW5kUGhvbmUocGFyYW1zOiBCaW5kUGhvbmVSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcucmVxdWVzdDxhbnk+KGAke0FwaVVybHMuQklORF9QSE9ORV9VUkx9YCwge1xuICAgICAgICAgICAgbWV0aG9kOiAnUEFUQ0gnLFxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgUGFzc3dvcmQuXG4gICAgICogQHBhcmFtIHtTZXRQYXNzd29yZHJSZXF1ZXN0fSBwYXJhbXNcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGFueT59XG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIHNldFBhc3N3b3JkKHBhcmFtczogU2V0UGFzc3dvcmRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcucmVxdWVzdDxhbnk+KGAke0FwaVVybHMuQVVUSF9TRVRfUEFTU1dPUkR9YCwge1xuICAgICAgICAgICAgbWV0aG9kOiAnUEFUQ0gnLFxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGN1cnJlbnQgdXNlciB2ZXJpZmljYXRpb24uXG4gICAgICogQHBhcmFtIHtHZXRWZXJpZmljYXRpb25SZXF1ZXN0fSBwYXJhbXMgQSBHZXRWZXJpZmljYXRpb25SZXF1ZXN0IE9iamVjdC5cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPEdldFZlcmlmaWNhdGlvblJlc3BvbnNlPn0gQSBQcm9taXNlPEdldFZlcmlmaWNhdGlvblJlc3BvbnNlPiBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIGdldEN1clVzZXJWZXJpZmljYXRpb24oXG4gICAgICAgIHBhcmFtczogR2V0VmVyaWZpY2F0aW9uUmVxdWVzdCxcbiAgICApOiBQcm9taXNlPEdldFZlcmlmaWNhdGlvblJlc3BvbnNlPiB7XG4gICAgICAgIHBhcmFtcy5jbGllbnRfaWQgPSB0aGlzLl9jb25maWcuY2xpZW50SWQ7XG4gICAgICAgIHBhcmFtcy50YXJnZXQgPSAnQ1VSX1VTRVInO1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLnJlcXVlc3Q8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+KFxuICAgICAgICAgICAgQXBpVXJscy5WRVJJRklDQVRJT05fVVJMLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgd2l0aENhcHRjaGE6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY2hhbmdlIGJpbmRlZCBwcm92aWRlci5cbiAgICAgKiBAcGFyYW0ge0dldFZlcmlmaWNhdGlvblJlcXVlc3R9IHBhcmFtcyBBIEdldFZlcmlmaWNhdGlvblJlcXVlc3QgT2JqZWN0LlxuICAgICAqIEByZXR1cm4ge1Byb21pc2U8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+fSBBIFByb21pc2U8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+IG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgY2hhbmdlQmluZGVkUHJvdmlkZXIoXG4gICAgICAgIHBhcmFtczogQ2hhbmdlQmluZGVkUHJvdmlkZXJSZXF1ZXN0LFxuICAgICk6IFByb21pc2U8Q2hhbmdlQmluZGVkUHJvdmlkZXJSZXNwb25zZT4ge1xuICAgICAgICBwYXJhbXMuY2xpZW50X2lkID0gdGhpcy5fY29uZmlnLmNsaWVudElkO1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLnJlcXVlc3Q8Q2hhbmdlQmluZGVkUHJvdmlkZXJSZXNwb25zZT4oXG4gICAgICAgICAgICBgJHtBcGlVcmxzLlBST1ZJREVSX0xJU1R9LyR7cGFyYW1zLnByb3ZpZGVyX2lkfS90cmFuc2AsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgICAgICAgICBwcm92aWRlcl90cmFuc190b2tlbjogcGFyYW1zLnRyYW5zX3Rva2VuLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXRjaCB0aGUgdXNlciBwcm9maWxlLlxuICAgICAqIEBwYXJhbSB7VXNlclByb2ZpbGV9IHBhcmFtcyBBIFVzZXJQcm9maWxlIE9iamVjdC5cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPFVzZXJQcm9maWxlPn0gQSBQcm9taXNlPFVzZXJQcm9maWxlPiBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIHNldFVzZXJQcm9maWxlKHBhcmFtczogVXNlclByb2ZpbGUpOiBQcm9taXNlPFVzZXJQcm9maWxlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcucmVxdWVzdDxVc2VyUHJvZmlsZT4oQXBpVXJscy5VU0VSX1BSSUZJTEVfVVJMLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICAgICAgICBib2R5OiBwYXJhbXMsXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhdGNoIHRoZSB1c2VyIHByb2ZpbGUuXG4gICAgICogQHBhcmFtIHtRdWVyeVVzZXJQcm9maWxlUmVxfSBhcHBlbmRlZF9wYXJhbXMgQSBRdWVyeVVzZXJQcm9maWxlUmVxIE9iamVjdC5cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPFVzZXJQcm9maWxlPn0gQSBQcm9taXNlPFVzZXJQcm9maWxlPiBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIHF1ZXJ5VXNlclByb2ZpbGUoXG4gICAgICAgIGFwcGVuZGVkX3BhcmFtczogUXVlcnlVc2VyUHJvZmlsZVJlcSxcbiAgICApOiBQcm9taXNlPFVzZXJQcm9maWxlPiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke0FwaVVybHMuVVNFUl9RVUVSWV9VUkx9JHthcHBlbmRlZF9wYXJhbXN9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5yZXF1ZXN0PFVzZXJQcm9maWxlPih1cmwsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRoL2FwaXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFYixtQ0FBbUM7QUE4Qm5DLDZEQUE0RTtBQUU1RSw4Q0FBNkM7QUFnQjdDO0lBT0UsY0FBWSxJQUFpQjtRQUMzQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzNCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUMxQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLElBQU0sV0FBVyxHQUFHO2dCQUNsQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQ3pCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2FBQ3RCLENBQUM7WUFDRixZQUFZLEdBQUcsSUFBSSwyQkFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLElBQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzVELElBQU0sT0FBTyxHQUFHLElBQUksaUJBQU8sQ0FBQztnQkFDMUIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixPQUFPLEVBQUUsV0FBVztnQkFDcEIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2FBQ3RCLENBQUMsQ0FBQTtZQUNGLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtTQUN4QztRQUNELElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLE9B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Q3pDLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ3RCLGdCQUFPLENBQUMsYUFBYSxTQUFJLE1BQU0sQ0FBQyxXQUFXLFdBQVEsRUFDdEQ7d0JBQ0UsTUFBTSxFQUFFLE1BQU07d0JBQ2QsSUFBSSxFQUFFOzRCQUNKLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxXQUFXO3lCQUN6Qzt3QkFDRCxlQUFlLEVBQUUsSUFBSTtxQkFDdEIsQ0FDRixFQUFDOzs7S0FDSDtJQU9ZLDZCQUFjLEdBQTNCLFVBQTRCLE1BQW1COzs7Z0JBQzdDLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQWMsZ0JBQU8sQ0FBQyxnQkFBZ0IsRUFBRTt3QkFDakUsTUFBTSxFQUFFLE9BQU87d0JBQ2YsSUFBSSxFQUFFLE1BQU07d0JBQ1osZUFBZSxFQUFFLElBQUk7cUJBQ3RCLENBQUMsRUFBQzs7O0tBQ0o7SUFPWSwrQkFBZ0IsR0FBN0IsVUFDRSxlQUFvQzs7OztnQkFFOUIsR0FBRyxHQUFHLEtBQUcsZ0JBQU8sQ0FBQyxjQUFjLEdBQUcsZUFBaUIsQ0FBQztnQkFDMUQsV0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBYyxHQUFHLEVBQUU7d0JBQzVDLE1BQU0sRUFBRSxLQUFLO3dCQUNiLGVBQWUsRUFBRSxJQUFJO3FCQUN0QixDQUFDLEVBQUM7OztLQUNKO0lBQ0gsV0FBQztBQUFELENBQUMsQUF4Y0QsSUF3Y0M7QUF4Y1ksb0JBQUkiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7IEFwaVVybHMgfSBmcm9tICcuL2NvbnN0cyc7XG5pbXBvcnQge1xuICBHZXRWZXJpZmljYXRpb25SZXF1ZXN0LFxuICBHZXRWZXJpZmljYXRpb25SZXNwb25zZSxcbiAgVXNlclByb2ZpbGUsXG4gIFVzZXJJbmZvLFxuICBTaWduSW5SZXF1ZXN0LFxuICBTaWduVXBSZXF1ZXN0LFxuICBWZXJpZnlSZXF1ZXN0LFxuICBWZXJpZnlSZXNwb25zZSxcbiAgR2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlcXVlc3QsXG4gIEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXNwb25zZSxcbiAgR3JhbnRQcm92aWRlclRva2VuUmVxdWVzdCxcbiAgR3JhbnRQcm92aWRlclRva2VuUmVzcG9uc2UsXG4gIFBhdGNoUHJvdmlkZXJUb2tlblJlcXVlc3QsXG4gIFBhdGNoUHJvdmlkZXJUb2tlblJlc3BvbnNlLFxuICBTaWduSW5XaXRoUHJvdmlkZXJSZXF1ZXN0LFxuICBCaW5kV2l0aFByb3ZpZGVyUmVxdWVzdCxcbiAgVHJhbnNCeVByb3ZpZGVyUmVxdWVzdCxcbiAgR3JhbnRUb2tlblJlcXVlc3QsXG4gIFVzZXJQcm9maWxlUHJvdmlkZXIsXG4gIFVuYmluZFByb3ZpZGVyUmVxdWVzdCxcbiAgQ2hlY2tQYXNzd29yZHJSZXF1ZXN0LFxuICBCaW5kUGhvbmVSZXF1ZXN0LFxuICBTZXRQYXNzd29yZFJlcXVlc3QsXG4gIENoYW5nZUJpbmRlZFByb3ZpZGVyUmVxdWVzdCxcbiAgQ2hhbmdlQmluZGVkUHJvdmlkZXJSZXNwb25zZSxcbiAgUXVlcnlVc2VyUHJvZmlsZVJlcSxcbn0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgU2ltcGxlU3RvcmFnZSwgUmVxdWVzdEZ1bmN0aW9uIH0gZnJvbSAnLi4vb2F1dGgyY2xpZW50L2ludGVyZmFjZSc7XG5pbXBvcnQgeyBPQXV0aDJDbGllbnQsIGRlZmF1bHRTdG9yYWdlIH0gZnJvbSAnLi4vb2F1dGgyY2xpZW50L29hdXRoMmNsaWVudCc7XG5pbXBvcnQgeyBDcmVkZW50aWFscyB9IGZyb20gJy4uL29hdXRoMmNsaWVudC9tb2RlbHMnO1xuaW1wb3J0IHsgQ2FwdGNoYSB9IGZyb20gJy4uL2NhcHRjaGEvY2FwdGNoYSc7XG5pbXBvcnQgeyBJQ2xvdWRiYXNlIH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcyc7XG5cblxuZXhwb3J0IGludGVyZmFjZSBBdXRoT3B0aW9ucyB7XG4gIGFwaU9yaWdpbjogc3RyaW5nO1xuICBjbGllbnRJZDogc3RyaW5nO1xuICBjcmVkZW50aWFsc0NsaWVudD86IE9BdXRoMkNsaWVudDtcbiAgcmVxdWVzdD86IFJlcXVlc3RGdW5jdGlvbjtcbiAgc3RvcmFnZT86IFNpbXBsZVN0b3JhZ2U7XG4gIF9mcm9tQXBwPzogSUNsb3VkYmFzZSAvLyDmiYDlsZ5jbG91ZGJhc2UgYXBw5a+56LGhXG59XG5cbi8qKlxuICogQXV0aFxuICovXG5leHBvcnQgY2xhc3MgQXV0aCB7XG4gIHByaXZhdGUgX2NvbmZpZzogQXV0aE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7QXV0aE9wdGlvbnN9IG9wdHNcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdHM6IEF1dGhPcHRpb25zKSB7XG4gICAgbGV0IHJlcXVlc3QgPSBvcHRzLnJlcXVlc3Q7XG4gICAgbGV0IG9BdXRoMkNsaWVudCA9IG9wdHMuY3JlZGVudGlhbHNDbGllbnQ7XG4gICAgaWYgKCFvQXV0aDJDbGllbnQpIHtcbiAgICAgIGNvbnN0IGluaXRPcHRpb25zID0ge1xuICAgICAgICBhcGlPcmlnaW46IG9wdHMuYXBpT3JpZ2luLFxuICAgICAgICBjbGllbnRJZDogb3B0cy5jbGllbnRJZCxcbiAgICAgICAgc3RvcmFnZTogb3B0cy5zdG9yYWdlLFxuICAgICAgfTtcbiAgICAgIG9BdXRoMkNsaWVudCA9IG5ldyBPQXV0aDJDbGllbnQoaW5pdE9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IGJhc2VSZXF1ZXN0ID0gb0F1dGgyQ2xpZW50LnJlcXVlc3QuYmluZChvQXV0aDJDbGllbnQpO1xuICAgICAgY29uc3QgY2FwdGNoYSA9IG5ldyBDYXB0Y2hhKHtcbiAgICAgICAgY2xpZW50SWQ6IG9wdHMuY2xpZW50SWQsXG4gICAgICAgIHJlcXVlc3Q6IGJhc2VSZXF1ZXN0LFxuICAgICAgICBzdG9yYWdlOiBvcHRzLnN0b3JhZ2UsXG4gICAgICB9KVxuICAgICAgcmVxdWVzdCA9IGNhcHRjaGEucmVxdWVzdC5iaW5kKGNhcHRjaGEpXG4gICAgfVxuICAgIHRoaXMuX2NvbmZpZyA9IHtcbiAgICAgIGFwaU9yaWdpbjogb3B0cy5hcGlPcmlnaW4sXG4gICAgICBjbGllbnRJZDogb3B0cy5jbGllbnRJZCxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgICBjcmVkZW50aWFsc0NsaWVudDogb0F1dGgyQ2xpZW50LFxuICAgICAgc3RvcmFnZTogb3B0cy5zdG9yYWdlIHx8IGRlZmF1bHRTdG9yYWdlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBpbi5cbiAgICogQHBhcmFtIHtTaWduSW5SZXF1ZXN0fSBwYXJhbXMgQSBTaWduSW5SZXF1ZXN0IE9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59IEEgUHJvbWlzZTxDcmVkZW50aWFscz4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNpZ25JbihwYXJhbXM6IFNpZ25JblJlcXVlc3QpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcGFyYW1zLmNsaWVudF9pZCA9IHRoaXMuX2NvbmZpZy5jbGllbnRJZDtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLl9jb25maWcucmVxdWVzdDxDcmVkZW50aWFscz4oXG4gICAgICBBcGlVcmxzLkFVVEhfU0lHTl9JTl9VUkwsXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBwYXJhbXNcbiAgICAgIH0sXG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLl9jb25maWcuY3JlZGVudGlhbHNDbGllbnQuc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHMpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlZGVudGlhbHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gaW4gQW5vbnltb3VzbHlcbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59IEEgUHJvbWlzZTxDcmVkZW50aWFscz4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNpZ25JbkFub255bW91c2x5KCk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLl9jb25maWcucmVxdWVzdDxDcmVkZW50aWFscz4oXG4gICAgICBBcGlVcmxzLkFVVEhfU0lHTl9JTl9BTk9OWU1PVVNMWV9VUkwsXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgY2xpZW50X2lkOiB0aGlzLl9jb25maWcuY2xpZW50SWRcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuICAgIGF3YWl0IHRoaXMuX2NvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscyk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVkZW50aWFscyk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiB1cC5cbiAgICogQHBhcmFtIHtTaWduVXBSZXF1ZXN0fSBwYXJhbXMgQSBTaWduVXBSZXF1ZXN0IE9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59IEEgUHJvbWlzZTxDcmVkZW50aWFscz4gb2JqZWN0LlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHNpZ25VcChwYXJhbXM6IFNpZ25VcFJlcXVlc3QpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcGFyYW1zLmNsaWVudF9pZCA9IHRoaXMuX2NvbmZpZy5jbGllbnRJZDtcbiAgICBjb25zdCBkYXRhOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuX2NvbmZpZy5yZXF1ZXN0PENyZWRlbnRpYWxzPihcbiAgICAgIEFwaVVybHMuQVVUSF9TSUdOX1VQX1VSTCxcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLl9jb25maWcuY3JlZGVudGlhbHNDbGllbnQuc2V0Q3JlZGVudGlhbHMoZGF0YSk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIG91dC5cbiAgICogQHJldHVybiB7T2JqZWN0fSBBIFByb21pc2U8dm9pZD4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNpZ25PdXQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBhY2Nlc3NUb2tlbjogc3RyaW5nID0gYXdhaXQgdGhpcy5fY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LmdldEFjY2Vzc1Rva2VuKCk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuX2NvbmZpZy5yZXF1ZXN0KEFwaVVybHMuQVVUSF9SRVZPS0VfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgY2xpZW50X2lkOiB0aGlzLl9jb25maWcuY2xpZW50SWQsXG4gICAgICAgIHRva2VuOiBhY2Nlc3NUb2tlbixcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgYXdhaXQgdGhpcy5fY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LnNldENyZWRlbnRpYWxzKCk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHZlcmlmaWNhdGlvbi5cbiAgICogQHBhcmFtIHtHZXRWZXJpZmljYXRpb25SZXF1ZXN0fSBwYXJhbXMgQSBHZXRWZXJpZmljYXRpb25SZXF1ZXN0IE9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxHZXRWZXJpZmljYXRpb25SZXNwb25zZT59IEEgUHJvbWlzZTxHZXRWZXJpZmljYXRpb25SZXNwb25zZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFZlcmlmaWNhdGlvbihcbiAgICBwYXJhbXM6IEdldFZlcmlmaWNhdGlvblJlcXVlc3QsXG4gICk6IFByb21pc2U8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+IHtcbiAgICBwYXJhbXMuY2xpZW50X2lkID0gdGhpcy5fY29uZmlnLmNsaWVudElkO1xuICAgIHJldHVybiB0aGlzLl9jb25maWcucmVxdWVzdDxHZXRWZXJpZmljYXRpb25SZXNwb25zZT4oXG4gICAgICBBcGlVcmxzLlZFUklGSUNBVElPTl9VUkwsXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBwYXJhbXMsXG4gICAgICAgIHdpdGhDYXB0Y2hhOiB0cnVlXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogIFZlcmlmeSB0aGUgY29kZVxuICAgKiBAcGFyYW0ge1ZlcmlmeVJlcXVlc3R9IHBhcmFtcyBBIFZlcmlmeVJlcXVlc3QgT2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFZlcmlmeVJlc3BvbnNlPn0gQSBQcm9taXNlPFZlcmlmeVJlc3BvbnNlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdmVyaWZ5KHBhcmFtczogVmVyaWZ5UmVxdWVzdCk6IFByb21pc2U8VmVyaWZ5UmVzcG9uc2U+IHtcbiAgICBwYXJhbXMuY2xpZW50X2lkID0gdGhpcy5fY29uZmlnLmNsaWVudElkO1xuICAgIHJldHVybiB0aGlzLl9jb25maWcucmVxdWVzdDxWZXJpZnlSZXNwb25zZT4oQXBpVXJscy5WRVJJRllfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW4gcHJvdmlkZXIgcmVkaXJlY3QgdXJpLlxuICAgKiBAcGFyYW0ge0dlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXF1ZXN0fSBwYXJhbXMgQSBHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVxdWVzdCBvYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8R2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlc3BvbnNlPn0gQSBQcm9taXNlPEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXNwb25zZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdlblByb3ZpZGVyUmVkaXJlY3RVcmkoXG4gICAgcGFyYW1zOiBHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVxdWVzdCxcbiAgKTogUHJvbWlzZTxHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVzcG9uc2U+IHtcbiAgICBsZXQgdXJsID0gYCR7QXBpVXJscy5QUk9WSURFUl9VUklfVVJMfT9jbGllbnRfaWQ9JHt0aGlzLl9jb25maWcuY2xpZW50SWRcbiAgICAgIH0mcHJvdmlkZXJfaWQ9JHtwYXJhbXMucHJvdmlkZXJfaWR9JnJlZGlyZWN0X3VyaT0ke2VuY29kZVVSSUNvbXBvbmVudChcbiAgICAgICAgcGFyYW1zLnByb3ZpZGVyX3JlZGlyZWN0X3VyaSxcbiAgICAgICl9JnN0YXRlPSR7cGFyYW1zLnN0YXRlfWA7XG4gICAgY29uc3Qgb3RoZXJfcGFyYW1zID0gcGFyYW1zLm90aGVyX3BhcmFtcztcbiAgICBpZiAob3RoZXJfcGFyYW1zKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBvdGhlcl9wYXJhbXMuc2lnbl9vdXRfdXJpID09PSAnc3RyaW5nJyAmJlxuICAgICAgICBvdGhlcl9wYXJhbXMuc2lnbl9vdXRfdXJpLmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICB1cmwgKz0gYCZvdGhlcl9wYXJhbXNbc2lnbl9vdXRfdXJpXT0ke290aGVyX3BhcmFtcy5zaWduX291dF91cml9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5yZXF1ZXN0PEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXNwb25zZT4odXJsLCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHByb3ZpZGVyIHRva2VuLlxuICAgKiBAcGFyYW0ge0dyYW50UHJvdmlkZXJUb2tlblJlcXVlc3R9IHBhcmFtcyBBIEdyYW50UHJvdmlkZXJUb2tlblJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPEdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlPn0gQSBQcm9taXNlPEdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ3JhbnRQcm92aWRlclRva2VuKFxuICAgIHBhcmFtczogR3JhbnRQcm92aWRlclRva2VuUmVxdWVzdCxcbiAgKTogUHJvbWlzZTxHcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZT4ge1xuICAgIHBhcmFtcy5jbGllbnRfaWQgPSB0aGlzLl9jb25maWcuY2xpZW50SWQ7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5yZXF1ZXN0PEdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlPihcbiAgICAgIEFwaVVybHMuUFJPVklERVJfVE9LRU5fVVJMLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHByb3ZpZGVyIHRva2VuLlxuICAgKiBAcGFyYW0ge1BhdGNoUHJvdmlkZXJUb2tlblJlcXVlc3R9IHBhcmFtcyBBIFBhdGNoUHJvdmlkZXJUb2tlblJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFBhdGNoUHJvdmlkZXJUb2tlblJlc3BvbnNlPn0gQSBQcm9taXNlPFBhdGNoUHJvdmlkZXJUb2tlblJlc3BvbnNlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcGF0Y2hQcm92aWRlclRva2VuKFxuICAgIHBhcmFtczogUGF0Y2hQcm92aWRlclRva2VuUmVxdWVzdCxcbiAgKTogUHJvbWlzZTxQYXRjaFByb3ZpZGVyVG9rZW5SZXNwb25zZT4ge1xuICAgIHBhcmFtcy5jbGllbnRfaWQgPSB0aGlzLl9jb25maWcuY2xpZW50SWQ7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5yZXF1ZXN0PFBhdGNoUHJvdmlkZXJUb2tlblJlc3BvbnNlPihcbiAgICAgIEFwaVVybHMuUFJPVklERVJfVE9LRU5fVVJMLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduaW4gd2l0aCBwcm92aWRlciByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge1NpZ25JbldpdGhQcm92aWRlclJlcXVlc3R9IHBhcmFtcyBBIFNpZ25JbldpdGhQcm92aWRlclJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn0gQSBQcm9taXNlPENyZWRlbnRpYWxzPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aFByb3ZpZGVyKFxuICAgIHBhcmFtczogU2lnbkluV2l0aFByb3ZpZGVyUmVxdWVzdCxcbiAgKTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIHBhcmFtcy5jbGllbnRfaWQgPSB0aGlzLl9jb25maWcuY2xpZW50SWQ7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5fY29uZmlnLnJlcXVlc3Q8Q3JlZGVudGlhbHM+KFxuICAgICAgQXBpVXJscy5BVVRIX1NJR05fSU5fV0lUSF9QUk9WSURFUl9VUkwsXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBwYXJhbXMsXG4gICAgICB9LFxuICAgICk7XG4gICAgYXdhaXQgdGhpcy5fY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LnNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWRlbnRpYWxzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kIHdpdGggcHJvdmlkZXJcbiAgICogQHBhcmFtIHtCaW5kV2l0aFByb3ZpZGVyUmVxdWVzdH0gcGFyYW1zIEEgQmluZFdpdGhQcm92aWRlclJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIFByb21pc2U8YW55PiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYmluZFdpdGhQcm92aWRlcihcbiAgICBwYXJhbXM6IEJpbmRXaXRoUHJvdmlkZXJSZXF1ZXN0LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBwYXJhbXMuY2xpZW50X2lkID0gdGhpcy5fY29uZmlnLmNsaWVudElkO1xuICAgIHJldHVybiB0aGlzLl9jb25maWcucmVxdWVzdDxhbnk+KEFwaVVybHMuUFJPVklERVJfQklORF9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdXNlciBwcm9maWxlLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFVzZXJQcm9maWxlPn0gQSBQcm9taXNlPFVzZXJQcm9maWxlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0VXNlclByb2ZpbGUoKTogUHJvbWlzZTxVc2VyUHJvZmlsZT4ge1xuICAgIHJldHVybiB0aGlzLmdldFVzZXJJbmZvKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB1c2VyIGluZm8uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8VXNlckluZm8+fSBBIFByb21pc2U8VXNlclByb2ZpbGU+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRVc2VySW5mbygpOiBQcm9taXNlPFVzZXJJbmZvPiB7XG4gICAgY29uc3QgdXNlckluZm8gPSBhd2FpdCB0aGlzLl9jb25maWcucmVxdWVzdDxVc2VySW5mbz4oQXBpVXJscy5VU0VSX01FX1VSTCwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KTtcbiAgICBpZiAodXNlckluZm8ucGljdHVyZSkge1xuICAgICAgdXNlckluZm8uYXZhdGFyVXJsID0gdXNlckluZm8ucGljdHVyZTtcbiAgICB9XG5cbiAgICBpZiAodXNlckluZm8uc3ViKSB7XG4gICAgICB1c2VySW5mby51aWQgPSB1c2VySW5mby5zdWJcbiAgICB9XG5cbiAgICBpZiAodXNlckluZm8ubmFtZSkge1xuICAgICAgdXNlckluZm8udXNlcm5hbWUgPSB1c2VySW5mby5uYW1lXG4gICAgfVxuICAgIHJldHVybiB1c2VySW5mbztcbiAgfVxuXG4gIC8qKlxuICAgKiBoYXNMb2dpblN0YXRlIGNoZWNrIGlmIGhhcyBsb2dpbiBzdGF0ZVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSBBIFByb21pc2U8Ym9vbGVhbj4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGhhc0xvZ2luU3RhdGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX2NvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5nZXRBY2Nlc3NUb2tlbigpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaGFzTG9naW5TdGF0ZVN5bmMoKTogQ3JlZGVudGlhbHMgfCBudWxsIHtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHRoaXMuX2NvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5nZXRDcmVkZW50aWFsc1N5bmMoKVxuICAgIHJldHVybiBjcmVkZW50aWFsc1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldExvZ2luU3RhdGUoKTogUHJvbWlzZTxDcmVkZW50aWFscyB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LmdldENyZWRlbnRpYWxzQXN5bmMoKVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zIGJ5IHByb3ZpZGVyLlxuICAgKiBAcGFyYW0ge1RyYW5zQnlQcm92aWRlclJlcXVlc3R9IHBhcmFtcyBBIFRyYW5zQnlQcm92aWRlclJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn0gQSBQcm9taXNlPENyZWRlbnRpYWxzPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdHJhbnNCeVByb3ZpZGVyKFxuICAgIHBhcmFtczogVHJhbnNCeVByb3ZpZGVyUmVxdWVzdCxcbiAgKTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcucmVxdWVzdDxDcmVkZW50aWFscz4oXG4gICAgICBBcGlVcmxzLlVTRVJfVFJBTlNfQllfUFJPVklERVJfVVJMLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHRva2VuLlxuICAgKiBAcGFyYW0ge0dyYW50VG9rZW5SZXF1ZXN0fSBwYXJhbXMgQSBHcmFudFRva2VuUmVxdWVzdCBvYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fSBBIFByb21pc2U8Q3JlZGVudGlhbHM+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBncmFudFRva2VuKHBhcmFtczogR3JhbnRUb2tlblJlcXVlc3QpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcGFyYW1zLmNsaWVudF9pZCA9IHRoaXMuX2NvbmZpZy5jbGllbnRJZDtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLnJlcXVlc3Q8Q3JlZGVudGlhbHM+KEFwaVVybHMuQVVUSF9UT0tFTl9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcHJvdmlkZSBsaXN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFVzZXJQcm9maWxlUHJvdmlkZXI+fSBBIFByb21pc2U8VXNlclByb2ZpbGVQcm92aWRlcj4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFByb3ZpZGVycygpOiBQcm9taXNlPFVzZXJQcm9maWxlUHJvdmlkZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLnJlcXVlc3Q8VXNlclByb2ZpbGVQcm92aWRlcj4oQXBpVXJscy5QUk9WSURFUl9MSVNULCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHVuYmluZCBwcm92aWRlci5cbiAgICogQHBhcmFtIHtVbmJpbmRQcm92aWRlclJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdW5iaW5kUHJvdmlkZXIocGFyYW1zOiBVbmJpbmRQcm92aWRlclJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBwYXJhbXMuY2xpZW50X2lkID0gdGhpcy5fY29uZmlnLmNsaWVudElkO1xuICAgIHJldHVybiB0aGlzLl9jb25maWcucmVxdWVzdDxhbnk+KFxuICAgICAgYCR7QXBpVXJscy5QUk9WSURFUl9VTkJJTkRfVVJMfS8ke3BhcmFtcy5wcm92aWRlcl9pZH1gLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogY2hlY2sgUGFzc3dvcmQuXG4gICAqIEBwYXJhbSB7Q2hlY2tQYXNzd29yZHJSZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybiB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNoZWNrUGFzc3dvcmQocGFyYW1zOiBDaGVja1Bhc3N3b3JkclJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLnJlcXVlc3Q8YW55PihgJHtBcGlVcmxzLkNIRUNLX1BXRF9VUkx9YCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogY2hlY2sgUGFzc3dvcmQuXG4gICAqIEBwYXJhbSB7Q2hlY2tQYXNzd29yZHJSZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybiB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGJpbmRQaG9uZShwYXJhbXM6IEJpbmRQaG9uZVJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLnJlcXVlc3Q8YW55PihgJHtBcGlVcmxzLkJJTkRfUEhPTkVfVVJMfWAsIHtcbiAgICAgIG1ldGhvZDogJ1BBVENIJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgUGFzc3dvcmQuXG4gICAqIEBwYXJhbSB7U2V0UGFzc3dvcmRyUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm4ge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRQYXNzd29yZChwYXJhbXM6IFNldFBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcucmVxdWVzdDxhbnk+KGAke0FwaVVybHMuQVVUSF9TRVRfUEFTU1dPUkR9YCwge1xuICAgICAgbWV0aG9kOiAnUEFUQ0gnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCB1c2VyIHZlcmlmaWNhdGlvbi5cbiAgICogQHBhcmFtIHtHZXRWZXJpZmljYXRpb25SZXF1ZXN0fSBwYXJhbXMgQSBHZXRWZXJpZmljYXRpb25SZXF1ZXN0IE9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxHZXRWZXJpZmljYXRpb25SZXNwb25zZT59IEEgUHJvbWlzZTxHZXRWZXJpZmljYXRpb25SZXNwb25zZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEN1clVzZXJWZXJpZmljYXRpb24oXG4gICAgcGFyYW1zOiBHZXRWZXJpZmljYXRpb25SZXF1ZXN0LFxuICApOiBQcm9taXNlPEdldFZlcmlmaWNhdGlvblJlc3BvbnNlPiB7XG4gICAgcGFyYW1zLmNsaWVudF9pZCA9IHRoaXMuX2NvbmZpZy5jbGllbnRJZDtcbiAgICBwYXJhbXMudGFyZ2V0ID0gJ0NVUl9VU0VSJztcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLnJlcXVlc3Q8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+KFxuICAgICAgQXBpVXJscy5WRVJJRklDQVRJT05fVVJMLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgIHdpdGhDYXB0Y2hhOiB0cnVlXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogY2hhbmdlIGJpbmRlZCBwcm92aWRlci5cbiAgICogQHBhcmFtIHtHZXRWZXJpZmljYXRpb25SZXF1ZXN0fSBwYXJhbXMgQSBHZXRWZXJpZmljYXRpb25SZXF1ZXN0IE9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxHZXRWZXJpZmljYXRpb25SZXNwb25zZT59IEEgUHJvbWlzZTxHZXRWZXJpZmljYXRpb25SZXNwb25zZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNoYW5nZUJpbmRlZFByb3ZpZGVyKFxuICAgIHBhcmFtczogQ2hhbmdlQmluZGVkUHJvdmlkZXJSZXF1ZXN0LFxuICApOiBQcm9taXNlPENoYW5nZUJpbmRlZFByb3ZpZGVyUmVzcG9uc2U+IHtcbiAgICBwYXJhbXMuY2xpZW50X2lkID0gdGhpcy5fY29uZmlnLmNsaWVudElkO1xuICAgIHJldHVybiB0aGlzLl9jb25maWcucmVxdWVzdDxDaGFuZ2VCaW5kZWRQcm92aWRlclJlc3BvbnNlPihcbiAgICAgIGAke0FwaVVybHMuUFJPVklERVJfTElTVH0vJHtwYXJhbXMucHJvdmlkZXJfaWR9L3RyYW5zYCxcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBwcm92aWRlcl90cmFuc190b2tlbjogcGFyYW1zLnRyYW5zX3Rva2VuLFxuICAgICAgICB9LFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUGF0Y2ggdGhlIHVzZXIgcHJvZmlsZS5cbiAgICogQHBhcmFtIHtVc2VyUHJvZmlsZX0gcGFyYW1zIEEgVXNlclByb2ZpbGUgT2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFVzZXJQcm9maWxlPn0gQSBQcm9taXNlPFVzZXJQcm9maWxlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0VXNlclByb2ZpbGUocGFyYW1zOiBVc2VyUHJvZmlsZSk6IFByb21pc2U8VXNlclByb2ZpbGU+IHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLnJlcXVlc3Q8VXNlclByb2ZpbGU+KEFwaVVybHMuVVNFUl9QUklGSUxFX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUEFUQ0gnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhdGNoIHRoZSB1c2VyIHByb2ZpbGUuXG4gICAqIEBwYXJhbSB7UXVlcnlVc2VyUHJvZmlsZVJlcX0gYXBwZW5kZWRfcGFyYW1zIEEgUXVlcnlVc2VyUHJvZmlsZVJlcSBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8VXNlclByb2ZpbGU+fSBBIFByb21pc2U8VXNlclByb2ZpbGU+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBxdWVyeVVzZXJQcm9maWxlKFxuICAgIGFwcGVuZGVkX3BhcmFtczogUXVlcnlVc2VyUHJvZmlsZVJlcSxcbiAgKTogUHJvbWlzZTxVc2VyUHJvZmlsZT4ge1xuICAgIGNvbnN0IHVybCA9IGAke0FwaVVybHMuVVNFUl9RVUVSWV9VUkx9JHthcHBlbmRlZF9wYXJhbXN9YDtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLnJlcXVlc3Q8VXNlclByb2ZpbGU+KHVybCwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxufVxuIl19

@@ -94,2 +94,3 @@ interface BaseRequest {

picture?: string;
avatarUrl?: string;
username?: string;

@@ -105,2 +106,4 @@ email?: string;

created_from?: string;
sub?: string;
uid?: string;
}

@@ -107,0 +110,0 @@ export declare type UserInfo = UserProfile;

2

dist/auth/models.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1dGgvbW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbnRlcmZhY2UgQmFzZVJlcXVlc3Qge1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbkluUmVxdWVzdCBleHRlbmRzIEJhc2VSZXF1ZXN0IHtcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gIHBhc3N3b3JkPzogc3RyaW5nO1xuICB2ZXJpZmljYXRpb25fY29kZT86IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uX3Rva2VuPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25JbldpdGhQcm92aWRlclJlcXVlc3QgZXh0ZW5kcyBCYXNlUmVxdWVzdCB7XG4gIHByb3ZpZGVyX3Rva2VuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnblVwUmVxdWVzdCBleHRlbmRzIEJhc2VSZXF1ZXN0IHtcbiAgcGhvbmVfbnVtYmVyPzogc3RyaW5nO1xuICBlbWFpbD86IHN0cmluZztcblxuICB2ZXJpZmljYXRpb25fY29kZT86IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uX3Rva2VuPzogc3RyaW5nO1xuICBwcm92aWRlcl90b2tlbj86IHN0cmluZztcblxuICBwYXNzd29yZD86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgZ2VuZGVyPzogc3RyaW5nO1xuICBwaWN0dXJlPzogc3RyaW5nO1xuICBsb2NhbGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0VmVyaWZpY2F0aW9uUmVxdWVzdCBleHRlbmRzIEJhc2VSZXF1ZXN0IHtcbiAgcGhvbmVfbnVtYmVyPzogc3RyaW5nO1xuICBlbWFpbD86IHN0cmluZztcbiAgdGFyZ2V0Pzogc3RyaW5nIHwgJ0FOWSc7XG4gIHVzYWdlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldFZlcmlmaWNhdGlvblJlc3BvbnNlIHtcbiAgdmVyaWZpY2F0aW9uX2lkPzogc3RyaW5nO1xuICBpc191c2VyPzogYm9vbGVhbiB8IGZhbHNlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeVJlc3BvbnNlIHtcbiAgdmVyaWZpY2F0aW9uX3Rva2VuPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeVJlcXVlc3QgZXh0ZW5kcyBCYXNlUmVxdWVzdCB7XG4gIHZlcmlmaWNhdGlvbl9jb2RlOiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbl9pZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlckJpbmRSZXF1ZXN0IHtcbiAgcHJvdmlkZXJfdG9rZW46IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcmFudFByb3ZpZGVyVG9rZW5SZXF1ZXN0IGV4dGVuZHMgQmFzZVJlcXVlc3Qge1xuICBwcm92aWRlcl9pZDogc3RyaW5nO1xuICBwcm92aWRlcl9yZWRpcmVjdF91cmk/OiBzdHJpbmc7XG4gIHByb3ZpZGVyX2NvZGU/OiBzdHJpbmc7XG4gIHByb3ZpZGVyX2FjY2Vzc190b2tlbj86IHN0cmluZztcbiAgcHJvdmlkZXJfaWRfdG9rZW4/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JhbnRQcm92aWRlclRva2VuUmVzcG9uc2Uge1xuICBwcm92aWRlcl90b2tlbjogc3RyaW5nO1xuICBleHBpcmVzX2luOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGF0Y2hQcm92aWRlclRva2VuUmVxdWVzdCBleHRlbmRzIEJhc2VSZXF1ZXN0IHtcbiAgcHJvdmlkZXJfdG9rZW46IHN0cmluZztcbiAgcHJvdmlkZXJfcGFyYW1zOiB7XG4gICAgZW5jcnlwdGVkRGF0YTogc3RyaW5nO1xuICAgIGl2OiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGF0Y2hQcm92aWRlclRva2VuUmVzcG9uc2Uge1xuICBwcm92aWRlcl90b2tlbjogc3RyaW5nO1xuICBleHBpcmVzX2luOiBudW1iZXI7XG4gIHByb3ZpZGVyX3Byb2ZpbGU6IFByb3ZpZGVyUHJvZmlsZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVxdWVzdCB7XG4gIHByb3ZpZGVyX2lkOiBzdHJpbmc7XG4gIHByb3ZpZGVyX3JlZGlyZWN0X3VyaTogc3RyaW5nO1xuICBzdGF0ZTogc3RyaW5nO1xuICBvdGhlcl9wYXJhbXM/OiB7XG4gICAgc2lnbl9vdXRfdXJpPzogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXNwb25zZSB7XG4gIHVyaTogc3RyaW5nO1xuICBzaWdub3V0X3VyaT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCaW5kV2l0aFByb3ZpZGVyUmVxdWVzdCBleHRlbmRzIEJhc2VSZXF1ZXN0IHtcbiAgcHJvdmlkZXJfdG9rZW46IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCaW5kV2l0aFByb3ZpZGVyUmVxdWVzdCB7XG4gIHByb3ZpZGVyX3Rva2VuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclByb2ZpbGVQcm92aWRlciB7XG4gIGlkPzogc3RyaW5nO1xuICBwcm92aWRlcl91c2VyX2lkPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQcm9maWxlIHtcbiAgbmFtZT86IHN0cmluZztcbiAgcGljdHVyZT86IHN0cmluZztcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gIGVtYWlsPzogc3RyaW5nO1xuICBlbWFpbF92ZXJpZmllZD86IGJvb2xlYW47XG4gIHBob25lX251bWJlcj86IHN0cmluZztcbiAgcHJvdmlkZXJzPzogW1VzZXJQcm9maWxlUHJvdmlkZXJdO1xuICBnZW5kZXI/OiBzdHJpbmc7XG4gIGJpcnRoZGF0ZT86IHN0cmluZztcbiAgem9uZWluZm8/OiBzdHJpbmc7XG4gIGxvY2FsZT86IHN0cmluZztcbiAgY3JlYXRlZF9mcm9tPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBVc2VySW5mbyA9IFVzZXJQcm9maWxlO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVyUHJvZmlsZSB7XG4gIHByb3ZpZGVyX2lkOiBzdHJpbmc7XG4gIHBob25lX251bWJlcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc0J5UHJvdmlkZXJSZXF1ZXN0IHtcbiAgcHJvdmlkZXJfdG9rZW46IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcmFudFRva2VuUmVxdWVzdCBleHRlbmRzIEJhc2VSZXF1ZXN0IHtcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgY29kZT86IHN0cmluZztcbiAgZ3JhbnRfdHlwZT86IHN0cmluZztcbiAgcmVkaXJlY3RfdXJpPzogc3RyaW5nO1xuICBub25jZT86IHN0cmluZztcbiAgcmVmcmVzaF90b2tlbj86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5iaW5kUHJvdmlkZXJSZXF1ZXN0IGV4dGVuZHMgQmFzZVJlcXVlc3Qge1xuICBwcm92aWRlcl9pZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrUGFzc3dvcmRyUmVxdWVzdCBleHRlbmRzIEJhc2VSZXF1ZXN0IHtcbiAgcGFzc3dvcmQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCaW5kUGhvbmVSZXF1ZXN0IGV4dGVuZHMgQmFzZVJlcXVlc3Qge1xuICBwaG9uZV9udW1iZXI6IHN0cmluZztcbiAgc3Vkb190b2tlbjogc3RyaW5nO1xuICB2ZXJpZmljYXRpb25fdG9rZW46IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXRQYXNzd29yZFJlcXVlc3QgZXh0ZW5kcyBCYXNlUmVxdWVzdCB7XG4gIG5ld19wYXNzd29yZDogc3RyaW5nO1xuICBzdWRvX3Rva2VuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlQmluZGVkUHJvdmlkZXJSZXF1ZXN0IGV4dGVuZHMgQmFzZVJlcXVlc3Qge1xuICB0cmFuc190b2tlbjogc3RyaW5nO1xuICBwcm92aWRlcl9pZDogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBDaGFuZ2VCaW5kZWRQcm92aWRlclJlc3BvbnNlID0gQmFzZVJlcXVlc3RcblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeVVzZXJQcm9maWxlUmVxIGV4dGVuZHMgQmFzZVJlcXVlc3Qge1xuICBhcHBlbmRlZF9wYXJhbXM6IHN0cmluZztcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1dGgvbW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbnRlcmZhY2UgQmFzZVJlcXVlc3Qge1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbkluUmVxdWVzdCBleHRlbmRzIEJhc2VSZXF1ZXN0IHtcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gIHBhc3N3b3JkPzogc3RyaW5nO1xuICB2ZXJpZmljYXRpb25fY29kZT86IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uX3Rva2VuPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25JbldpdGhQcm92aWRlclJlcXVlc3QgZXh0ZW5kcyBCYXNlUmVxdWVzdCB7XG4gIHByb3ZpZGVyX3Rva2VuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnblVwUmVxdWVzdCBleHRlbmRzIEJhc2VSZXF1ZXN0IHtcbiAgcGhvbmVfbnVtYmVyPzogc3RyaW5nO1xuICBlbWFpbD86IHN0cmluZztcblxuICB2ZXJpZmljYXRpb25fY29kZT86IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uX3Rva2VuPzogc3RyaW5nO1xuICBwcm92aWRlcl90b2tlbj86IHN0cmluZztcblxuICBwYXNzd29yZD86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgZ2VuZGVyPzogc3RyaW5nO1xuICBwaWN0dXJlPzogc3RyaW5nO1xuICBsb2NhbGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0VmVyaWZpY2F0aW9uUmVxdWVzdCBleHRlbmRzIEJhc2VSZXF1ZXN0IHtcbiAgcGhvbmVfbnVtYmVyPzogc3RyaW5nO1xuICBlbWFpbD86IHN0cmluZztcbiAgdGFyZ2V0Pzogc3RyaW5nIHwgJ0FOWSc7XG4gIHVzYWdlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldFZlcmlmaWNhdGlvblJlc3BvbnNlIHtcbiAgdmVyaWZpY2F0aW9uX2lkPzogc3RyaW5nO1xuICBpc191c2VyPzogYm9vbGVhbiB8IGZhbHNlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeVJlc3BvbnNlIHtcbiAgdmVyaWZpY2F0aW9uX3Rva2VuPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeVJlcXVlc3QgZXh0ZW5kcyBCYXNlUmVxdWVzdCB7XG4gIHZlcmlmaWNhdGlvbl9jb2RlOiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbl9pZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlckJpbmRSZXF1ZXN0IHtcbiAgcHJvdmlkZXJfdG9rZW46IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcmFudFByb3ZpZGVyVG9rZW5SZXF1ZXN0IGV4dGVuZHMgQmFzZVJlcXVlc3Qge1xuICBwcm92aWRlcl9pZDogc3RyaW5nO1xuICBwcm92aWRlcl9yZWRpcmVjdF91cmk/OiBzdHJpbmc7XG4gIHByb3ZpZGVyX2NvZGU/OiBzdHJpbmc7XG4gIHByb3ZpZGVyX2FjY2Vzc190b2tlbj86IHN0cmluZztcbiAgcHJvdmlkZXJfaWRfdG9rZW4/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JhbnRQcm92aWRlclRva2VuUmVzcG9uc2Uge1xuICBwcm92aWRlcl90b2tlbjogc3RyaW5nO1xuICBleHBpcmVzX2luOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGF0Y2hQcm92aWRlclRva2VuUmVxdWVzdCBleHRlbmRzIEJhc2VSZXF1ZXN0IHtcbiAgcHJvdmlkZXJfdG9rZW46IHN0cmluZztcbiAgcHJvdmlkZXJfcGFyYW1zOiB7XG4gICAgZW5jcnlwdGVkRGF0YTogc3RyaW5nO1xuICAgIGl2OiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGF0Y2hQcm92aWRlclRva2VuUmVzcG9uc2Uge1xuICBwcm92aWRlcl90b2tlbjogc3RyaW5nO1xuICBleHBpcmVzX2luOiBudW1iZXI7XG4gIHByb3ZpZGVyX3Byb2ZpbGU6IFByb3ZpZGVyUHJvZmlsZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVxdWVzdCB7XG4gIHByb3ZpZGVyX2lkOiBzdHJpbmc7XG4gIHByb3ZpZGVyX3JlZGlyZWN0X3VyaTogc3RyaW5nO1xuICBzdGF0ZTogc3RyaW5nO1xuICBvdGhlcl9wYXJhbXM/OiB7XG4gICAgc2lnbl9vdXRfdXJpPzogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXNwb25zZSB7XG4gIHVyaTogc3RyaW5nO1xuICBzaWdub3V0X3VyaT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCaW5kV2l0aFByb3ZpZGVyUmVxdWVzdCBleHRlbmRzIEJhc2VSZXF1ZXN0IHtcbiAgcHJvdmlkZXJfdG9rZW46IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCaW5kV2l0aFByb3ZpZGVyUmVxdWVzdCB7XG4gIHByb3ZpZGVyX3Rva2VuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclByb2ZpbGVQcm92aWRlciB7XG4gIGlkPzogc3RyaW5nO1xuICBwcm92aWRlcl91c2VyX2lkPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQcm9maWxlIHtcbiAgbmFtZT86IHN0cmluZztcbiAgcGljdHVyZT86IHN0cmluZztcbiAgYXZhdGFyVXJsPzogc3RyaW5nO1xuICB1c2VybmFtZT86IHN0cmluZztcbiAgZW1haWw/OiBzdHJpbmc7XG4gIGVtYWlsX3ZlcmlmaWVkPzogYm9vbGVhbjtcbiAgcGhvbmVfbnVtYmVyPzogc3RyaW5nO1xuICBwcm92aWRlcnM/OiBbVXNlclByb2ZpbGVQcm92aWRlcl07XG4gIGdlbmRlcj86IHN0cmluZztcbiAgYmlydGhkYXRlPzogc3RyaW5nO1xuICB6b25laW5mbz86IHN0cmluZztcbiAgbG9jYWxlPzogc3RyaW5nO1xuICBjcmVhdGVkX2Zyb20/OiBzdHJpbmc7XG4gIHN1Yj86IHN0cmluZ1xuICB1aWQ/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgVXNlckluZm8gPSBVc2VyUHJvZmlsZTtcblxuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlclByb2ZpbGUge1xuICBwcm92aWRlcl9pZDogc3RyaW5nO1xuICBwaG9uZV9udW1iZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNCeVByb3ZpZGVyUmVxdWVzdCB7XG4gIHByb3ZpZGVyX3Rva2VuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JhbnRUb2tlblJlcXVlc3QgZXh0ZW5kcyBCYXNlUmVxdWVzdCB7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGdyYW50X3R5cGU/OiBzdHJpbmc7XG4gIHJlZGlyZWN0X3VyaT86IHN0cmluZztcbiAgbm9uY2U/OiBzdHJpbmc7XG4gIHJlZnJlc2hfdG9rZW4/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVuYmluZFByb3ZpZGVyUmVxdWVzdCBleHRlbmRzIEJhc2VSZXF1ZXN0IHtcbiAgcHJvdmlkZXJfaWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGVja1Bhc3N3b3JkclJlcXVlc3QgZXh0ZW5kcyBCYXNlUmVxdWVzdCB7XG4gIHBhc3N3b3JkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmluZFBob25lUmVxdWVzdCBleHRlbmRzIEJhc2VSZXF1ZXN0IHtcbiAgcGhvbmVfbnVtYmVyOiBzdHJpbmc7XG4gIHN1ZG9fdG9rZW46IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uX3Rva2VuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2V0UGFzc3dvcmRSZXF1ZXN0IGV4dGVuZHMgQmFzZVJlcXVlc3Qge1xuICBuZXdfcGFzc3dvcmQ6IHN0cmluZztcbiAgc3Vkb190b2tlbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYW5nZUJpbmRlZFByb3ZpZGVyUmVxdWVzdCBleHRlbmRzIEJhc2VSZXF1ZXN0IHtcbiAgdHJhbnNfdG9rZW46IHN0cmluZztcbiAgcHJvdmlkZXJfaWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQ2hhbmdlQmluZGVkUHJvdmlkZXJSZXNwb25zZSA9IEJhc2VSZXF1ZXN0XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlVc2VyUHJvZmlsZVJlcSBleHRlbmRzIEJhc2VSZXF1ZXN0IHtcbiAgYXBwZW5kZWRfcGFyYW1zOiBzdHJpbmc7XG59XG4iXX0=
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {

@@ -14,2 +25,8 @@ if (k2 === undefined) k2 = k;

});
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
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;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __importStar = (this && this.__importStar) || function (mod) {

@@ -22,4 +39,46 @@ if (mod && mod.__esModule) return mod;

};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
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;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.authModels = void 0;
var app_1 = require("@cloudbase/app");
var utilities_1 = require("@cloudbase/utilities");
var stopOAuthLoginWithAuth = utilities_1.helpers.stopOAuthLoginWithAuth;
var consts_1 = require("./oauth2client/consts");

@@ -29,13 +88,141 @@ Object.defineProperty(exports, "Syntax", { enumerable: true, get: function () { return consts_1.Syntax; } });

var oauth2client_1 = require("./oauth2client/oauth2client");
Object.defineProperty(exports, "defaultStorage", { enumerable: true, get: function () { return oauth2client_1.defaultStorage; } });
Object.defineProperty(exports, "defaultRequest", { enumerable: true, get: function () { return oauth2client_1.defaultRequest; } });
Object.defineProperty(exports, "toResponseError", { enumerable: true, get: function () { return oauth2client_1.toResponseError; } });
Object.defineProperty(exports, "generateRequestId", { enumerable: true, get: function () { return oauth2client_1.generateRequestId; } });
Object.defineProperty(exports, "OAuth2Client", { enumerable: true, get: function () { return oauth2client_1.OAuth2Client; } });
var oauth2client_2 = require("./oauth2client/oauth2client");
Object.defineProperty(exports, "defaultStorage", { enumerable: true, get: function () { return oauth2client_2.defaultStorage; } });
Object.defineProperty(exports, "defaultRequest", { enumerable: true, get: function () { return oauth2client_2.defaultRequest; } });
Object.defineProperty(exports, "toResponseError", { enumerable: true, get: function () { return oauth2client_2.toResponseError; } });
Object.defineProperty(exports, "generateRequestId", { enumerable: true, get: function () { return oauth2client_2.generateRequestId; } });
Object.defineProperty(exports, "OAuth2Client", { enumerable: true, get: function () { return oauth2client_2.OAuth2Client; } });
var interface_1 = require("./oauth2client/interface");
Object.defineProperty(exports, "AuthClient", { enumerable: true, get: function () { return interface_1.AuthClient; } });
var apis_1 = require("./auth/apis");
Object.defineProperty(exports, "Auth", { enumerable: true, get: function () { return apis_1.Auth; } });
var apis_2 = require("./auth/apis");
Object.defineProperty(exports, "Auth", { enumerable: true, get: function () { return apis_2.Auth; } });
var authModels = __importStar(require("./auth/models"));
exports.authModels = authModels;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdEQUF3RDtBQUFoRCxnR0FBQSxNQUFNLE9BQUE7QUFBRSxtR0FBQSxTQUFTLE9BQUE7QUFFekIsNERBT3FDO0FBTm5DLDhHQUFBLGNBQWMsT0FBQTtBQUNkLDhHQUFBLGNBQWMsT0FBQTtBQUVkLCtHQUFBLGVBQWUsT0FBQTtBQUNmLGlIQUFBLGlCQUFpQixPQUFBO0FBQ2pCLDRHQUFBLFlBQVksT0FBQTtBQUdkLHNEQUFtRTtBQUEzRCx1R0FBQSxVQUFVLE9BQUE7QUFTbEIsb0NBQThDO0FBQXpCLDRGQUFBLElBQUksT0FBQTtBQUV6Qix3REFBNEM7QUFDcEMsZ0NBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1N5bnRheCwgRXJyb3JUeXBlfSBmcm9tICcuL29hdXRoMmNsaWVudC9jb25zdHMnO1xuXG5leHBvcnQge1xuICBkZWZhdWx0U3RvcmFnZSxcbiAgZGVmYXVsdFJlcXVlc3QsXG4gIFRvUmVzcG9uc2VFcnJvck9wdGlvbnMsXG4gIHRvUmVzcG9uc2VFcnJvcixcbiAgZ2VuZXJhdGVSZXF1ZXN0SWQsXG4gIE9BdXRoMkNsaWVudCxcbn0gZnJvbSAnLi9vYXV0aDJjbGllbnQvb2F1dGgyY2xpZW50JztcblxuZXhwb3J0IHtBdXRoQ2xpZW50LCBTaW1wbGVTdG9yYWdlfSBmcm9tICcuL29hdXRoMmNsaWVudC9pbnRlcmZhY2UnO1xuXG5leHBvcnQge1xuICBDcmVkZW50aWFscyxcbiAgUmVzcG9uc2VFcnJvcixcbiAgT0F1dGgyQ2xpZW50T3B0aW9ucyxcbiAgQXV0aENsaWVudFJlcXVlc3RPcHRpb25zLFxufSBmcm9tICcuL29hdXRoMmNsaWVudC9tb2RlbHMnO1xuXG5leHBvcnQge0F1dGhPcHRpb25zLCBBdXRofSBmcm9tICcuL2F1dGgvYXBpcyc7XG5cbmltcG9ydCAqIGFzIGF1dGhNb2RlbHMgZnJvbSAnLi9hdXRoL21vZGVscyc7XG5leHBvcnQge2F1dGhNb2RlbHN9O1xuIl19
var COMPONENT_NAME = 'oauth';
var CloudbaseOAuth = (function () {
function CloudbaseOAuth(authOptions) {
var apiOrigin = authOptions.apiOrigin, clientId = authOptions.clientId, _fromApp = authOptions._fromApp;
this._fromApp = _fromApp;
this.oauth2client = new oauth2client_1.OAuth2Client({
apiOrigin: apiOrigin,
clientId: clientId
});
this.authApi = new apis_1.Auth(__assign({ credentialsClient: this.oauth2client }, authOptions));
}
CloudbaseOAuth.prototype.checkFromAuthV1OrV2 = function () {
return __awaiter(this, void 0, void 0, function () {
var _fromApp, authInstance, oauthInstance, authLogin, _a, oauthLogin, _b;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
_fromApp = this._fromApp;
authInstance = _fromApp.authInstance;
oauthInstance = _fromApp.oauthInstance || _fromApp.oauth();
_a = authInstance;
if (!_a) return [3, 2];
return [4, authInstance.getLoginState()];
case 1:
_a = (_c.sent());
_c.label = 2;
case 2:
authLogin = _a;
if (authLogin) {
return [2, 'auth'];
}
_b = oauthInstance;
if (!_b) return [3, 4];
return [4, oauthInstance.hasLoginState()];
case 3:
_b = (_c.sent());
_c.label = 4;
case 4:
oauthLogin = _b;
if (oauthLogin) {
return [2, 'oauth'];
}
return [2, ''];
}
});
});
};
CloudbaseOAuth.prototype.signIn = function (params) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2, this.authApi.signIn(params)];
});
});
};
CloudbaseOAuth.prototype.signOut = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2, this.authApi.signOut()];
});
});
};
CloudbaseOAuth.prototype.hasLoginState = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2, this.authApi.hasLoginState()];
});
});
};
CloudbaseOAuth.prototype.getUserInfo = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2, this.authApi.getUserInfo()];
});
});
};
CloudbaseOAuth.prototype.getLoginState = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2, this.authApi.getLoginState()];
});
});
};
CloudbaseOAuth.prototype.hasLoginStateSync = function () {
return this.authApi.hasLoginStateSync();
};
CloudbaseOAuth.prototype.signInAnonymously = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2, this.authApi.signInAnonymously()];
});
});
};
__decorate([
stopOAuthLoginWithAuth(),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], CloudbaseOAuth.prototype, "signIn", null);
__decorate([
stopOAuthLoginWithAuth(),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", Promise)
], CloudbaseOAuth.prototype, "signInAnonymously", null);
return CloudbaseOAuth;
}());
var component = {
name: COMPONENT_NAME,
namespace: 'oauth',
entity: function () {
if (this.oauthInstance) {
return this.oauthInstance;
}
var env = this.config.env;
this.oauthInstance = new CloudbaseOAuth({
clientId: env,
apiOrigin: app_1.getBaseEndPoint(),
_fromApp: this
});
return this.oauthInstance;
}
};
try {
cloudbase.registerComponent(component);
}
catch (e) { }
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsc0NBQWdEO0FBQ2hELGtEQUE4QztBQUN0QyxJQUFBLHNCQUFzQixHQUFLLG1CQUFPLHVCQUFaLENBQVk7QUFFMUMsZ0RBQTBEO0FBQWpELGdHQUFBLE1BQU0sT0FBQTtBQUFFLG1HQUFBLFNBQVMsT0FBQTtBQUUxQiw0REFBMEQ7QUFFMUQsNERBT3FDO0FBTm5DLDhHQUFBLGNBQWMsT0FBQTtBQUNkLDhHQUFBLGNBQWMsT0FBQTtBQUVkLCtHQUFBLGVBQWUsT0FBQTtBQUNmLGlIQUFBLGlCQUFpQixPQUFBO0FBQ2pCLDRHQUFBLFlBQVksT0FBQTtBQUdkLHNEQUFxRTtBQUE1RCx1R0FBQSxVQUFVLE9BQUE7QUFVbkIsb0NBQStDO0FBRS9DLG9DQUFnRDtBQUExQiw0RkFBQSxJQUFJLE9BQUE7QUFFMUIsd0RBQTRDO0FBQ25DLGdDQUFVO0FBSW5CLElBQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQztBQUUvQjtJQUtFLHdCQUFZLFdBQXdCO1FBQzFCLElBQUEsU0FBUyxHQUF5QixXQUFXLFVBQXBDLEVBQUUsUUFBUSxHQUFlLFdBQVcsU0FBMUIsRUFBRSxRQUFRLEdBQUssV0FBVyxTQUFoQixDQUFnQjtRQUNyRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksMkJBQVksQ0FBQztZQUNuQyxTQUFTLFdBQUE7WUFDVCxRQUFRLFVBQUE7U0FDVCxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksV0FBSSxZQUNyQixpQkFBaUIsRUFBRSxJQUFJLENBQUMsWUFBWSxJQUNqQyxXQUFXLEVBQ2QsQ0FBQTtJQUNKLENBQUM7SUFFWSw0Q0FBbUIsR0FBaEM7Ozs7Ozt3QkFDVSxRQUFRLEdBQUssSUFBSSxTQUFULENBQVM7d0JBQ25CLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFBO3dCQUNwQyxhQUFhLEdBQUcsUUFBUSxDQUFDLGFBQWEsSUFBSyxRQUFnQixDQUFDLEtBQUssRUFBRSxDQUFBO3dCQUN2RCxLQUFBLFlBQVksQ0FBQTtpQ0FBWixjQUFZO3dCQUFJLFdBQU0sWUFBWSxDQUFDLGFBQWEsRUFBRSxFQUFBOzs4QkFBbEMsU0FBa0M7Ozt3QkFBOUQsU0FBUyxLQUFxRDt3QkFDcEUsSUFBSSxTQUFTLEVBQUU7NEJBQ2IsV0FBTyxNQUFNLEVBQUE7eUJBQ2Q7d0JBQ2tCLEtBQUEsYUFBYSxDQUFBO2lDQUFiLGNBQWE7d0JBQUksV0FBTSxhQUFhLENBQUMsYUFBYSxFQUFFLEVBQUE7OzhCQUFuQyxTQUFtQzs7O3dCQUFqRSxVQUFVLEtBQXVEO3dCQUN2RSxJQUFJLFVBQVUsRUFBRTs0QkFDZCxXQUFPLE9BQU8sRUFBQTt5QkFDZjt3QkFDRCxXQUFPLEVBQUUsRUFBQTs7OztLQUNWO0lBVVksK0JBQU0sR0FBbkIsVUFBb0IsTUFBZ0M7OztnQkFDbEQsV0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQTs7O0tBQ25DO0lBRVksZ0NBQU8sR0FBcEI7OztnQkFDRSxXQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUE7OztLQUM5QjtJQU9ZLHNDQUFhLEdBQTFCOzs7Z0JBQ0UsV0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUFBOzs7S0FDcEM7SUFFWSxvQ0FBVyxHQUF4Qjs7O2dCQUNFLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBQTs7O0tBQ2xDO0lBT1ksc0NBQWEsR0FBMUI7OztnQkFDRSxXQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUE7OztLQUNwQztJQUVNLDBDQUFpQixHQUF4QjtRQUNFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO0lBQ3pDLENBQUM7SUFRWSwwQ0FBaUIsR0FBOUI7OztnQkFDRSxXQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsRUFBQTs7O0tBQ3hDO0lBMUNEO1FBREMsc0JBQXNCLEVBQUU7Ozs7Z0RBR3hCO0lBc0NEO1FBREMsc0JBQXNCLEVBQUU7Ozs7MkRBR3hCO0lBQ0gscUJBQUM7Q0FBQSxBQXJGRCxJQXFGQztBQUVELElBQU0sU0FBUyxHQUF3QjtJQUNyQyxJQUFJLEVBQUUsY0FBYztJQUNwQixTQUFTLEVBQUUsT0FBTztJQUNsQixNQUFNLEVBQUU7UUFFTixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO1NBQzNCO1FBRU8sSUFBQSxHQUFHLEdBQUssSUFBSSxDQUFDLE1BQU0sSUFBaEIsQ0FBaUI7UUFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGNBQWMsQ0FBQztZQUN0QyxRQUFRLEVBQUUsR0FBRztZQUNiLFNBQVMsRUFBRSxxQkFBZSxFQUFFO1lBQzVCLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7Q0FDRixDQUFBO0FBRUQsSUFBSTtJQUdGLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztDQUN4QztBQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQ2xvdWRiYXNlQ29tcG9uZW50IH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9jb21wb25lbnQnO1xuaW1wb3J0IHsgSUNsb3VkYmFzZSB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMnO1xuaW1wb3J0IHsgZ2V0QmFzZUVuZFBvaW50IH0gZnJvbSAnQGNsb3VkYmFzZS9hcHAnXG5pbXBvcnQgeyBoZWxwZXJzIH0gZnJvbSAnQGNsb3VkYmFzZS91dGlsaXRpZXMnXG5jb25zdCB7IHN0b3BPQXV0aExvZ2luV2l0aEF1dGggfSA9IGhlbHBlcnNcblxuZXhwb3J0IHsgU3ludGF4LCBFcnJvclR5cGUgfSBmcm9tICcuL29hdXRoMmNsaWVudC9jb25zdHMnO1xuXG5pbXBvcnQgeyBPQXV0aDJDbGllbnQgfSBmcm9tICcuL29hdXRoMmNsaWVudC9vYXV0aDJjbGllbnQnXG5cbmV4cG9ydCB7XG4gIGRlZmF1bHRTdG9yYWdlLFxuICBkZWZhdWx0UmVxdWVzdCxcbiAgVG9SZXNwb25zZUVycm9yT3B0aW9ucyxcbiAgdG9SZXNwb25zZUVycm9yLFxuICBnZW5lcmF0ZVJlcXVlc3RJZCxcbiAgT0F1dGgyQ2xpZW50LFxufSBmcm9tICcuL29hdXRoMmNsaWVudC9vYXV0aDJjbGllbnQnO1xuXG5leHBvcnQgeyBBdXRoQ2xpZW50LCBTaW1wbGVTdG9yYWdlIH0gZnJvbSAnLi9vYXV0aDJjbGllbnQvaW50ZXJmYWNlJztcblxuaW1wb3J0IHsgQ3JlZGVudGlhbHMgfSBmcm9tICcuL29hdXRoMmNsaWVudC9tb2RlbHMnXG5leHBvcnQge1xuICBDcmVkZW50aWFscyxcbiAgUmVzcG9uc2VFcnJvcixcbiAgT0F1dGgyQ2xpZW50T3B0aW9ucyxcbiAgQXV0aENsaWVudFJlcXVlc3RPcHRpb25zLFxufSBmcm9tICcuL29hdXRoMmNsaWVudC9tb2RlbHMnO1xuXG5pbXBvcnQgeyBBdXRoT3B0aW9ucywgQXV0aCB9IGZyb20gJy4vYXV0aC9hcGlzJ1xuXG5leHBvcnQgeyBBdXRoT3B0aW9ucywgQXV0aCB9IGZyb20gJy4vYXV0aC9hcGlzJztcblxuaW1wb3J0ICogYXMgYXV0aE1vZGVscyBmcm9tICcuL2F1dGgvbW9kZWxzJztcbmV4cG9ydCB7IGF1dGhNb2RlbHMgfTtcblxuZGVjbGFyZSBjb25zdCBjbG91ZGJhc2U6IElDbG91ZGJhc2U7XG5cbmNvbnN0IENPTVBPTkVOVF9OQU1FID0gJ29hdXRoJztcblxuY2xhc3MgQ2xvdWRiYXNlT0F1dGgge1xuICBwdWJsaWMgb2F1dGgyY2xpZW50OiBPQXV0aDJDbGllbnRcbiAgcHVibGljIGF1dGhBcGk6IEF1dGhcbiAgcHJpdmF0ZSBfZnJvbUFwcDogSUNsb3VkYmFzZVxuXG4gIGNvbnN0cnVjdG9yKGF1dGhPcHRpb25zOiBBdXRoT3B0aW9ucykge1xuICAgIGNvbnN0IHsgYXBpT3JpZ2luLCBjbGllbnRJZCwgX2Zyb21BcHAgfSA9IGF1dGhPcHRpb25zXG4gICAgdGhpcy5fZnJvbUFwcCA9IF9mcm9tQXBwXG4gICAgdGhpcy5vYXV0aDJjbGllbnQgPSBuZXcgT0F1dGgyQ2xpZW50KHtcbiAgICAgIGFwaU9yaWdpbixcbiAgICAgIGNsaWVudElkXG4gICAgfSlcblxuICAgIHRoaXMuYXV0aEFwaSA9IG5ldyBBdXRoKHtcbiAgICAgIGNyZWRlbnRpYWxzQ2xpZW50OiB0aGlzLm9hdXRoMmNsaWVudCxcbiAgICAgIC4uLmF1dGhPcHRpb25zXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjaGVja0Zyb21BdXRoVjFPclYyKCkge1xuICAgIGNvbnN0IHsgX2Zyb21BcHAgfSA9IHRoaXNcbiAgICBjb25zdCBhdXRoSW5zdGFuY2UgPSBfZnJvbUFwcC5hdXRoSW5zdGFuY2VcbiAgICBjb25zdCBvYXV0aEluc3RhbmNlID0gX2Zyb21BcHAub2F1dGhJbnN0YW5jZSB8fCAoX2Zyb21BcHAgYXMgYW55KS5vYXV0aCgpXG4gICAgY29uc3QgYXV0aExvZ2luID0gYXV0aEluc3RhbmNlICYmIGF3YWl0IGF1dGhJbnN0YW5jZS5nZXRMb2dpblN0YXRlKClcbiAgICBpZiAoYXV0aExvZ2luKSB7XG4gICAgICByZXR1cm4gJ2F1dGgnXG4gICAgfVxuICAgIGNvbnN0IG9hdXRoTG9naW4gPSBvYXV0aEluc3RhbmNlICYmIGF3YWl0IG9hdXRoSW5zdGFuY2UuaGFzTG9naW5TdGF0ZSgpXG4gICAgaWYgKG9hdXRoTG9naW4pIHtcbiAgICAgIHJldHVybiAnb2F1dGgnXG4gICAgfVxuICAgIHJldHVybiAnJ1xuICB9XG5cblxuICAvKipcbiAgICog55m75b2VXG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5TaWduSW5SZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8Q3JlZGVudGlhbHM+fVxuICAgKiBAbWVtYmVyb2YgQ2xvdWRiYXNlT0F1dGhcbiAgICovXG4gIEBzdG9wT0F1dGhMb2dpbldpdGhBdXRoKClcbiAgcHVibGljIGFzeW5jIHNpZ25JbihwYXJhbXM6IGF1dGhNb2RlbHMuU2lnbkluUmVxdWVzdCk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICByZXR1cm4gdGhpcy5hdXRoQXBpLnNpZ25JbihwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2lnbk91dCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmF1dGhBcGkuc2lnbk91dCgpXG4gIH1cblxuICAvKipcbiAgICogY2hlY2sg5b2T5YmN5piv5ZCm5beyIG9hdXRoIOeZu+W9lVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn1cbiAgICogQG1lbWJlcm9mIENsb3VkYmFzZU9BdXRoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaGFzTG9naW5TdGF0ZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5hdXRoQXBpLmhhc0xvZ2luU3RhdGUoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFVzZXJJbmZvKCk6IFByb21pc2U8YXV0aE1vZGVscy5Vc2VyUHJvZmlsZT4ge1xuICAgIHJldHVybiB0aGlzLmF1dGhBcGkuZ2V0VXNlckluZm8oKVxuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPliBvYXV0aCDnmbvlvZXmgIFcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gICAqIEBtZW1iZXJvZiBDbG91ZGJhc2VPQXV0aFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldExvZ2luU3RhdGUoKTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIHJldHVybiB0aGlzLmF1dGhBcGkuZ2V0TG9naW5TdGF0ZSgpXG4gIH1cblxuICBwdWJsaWMgaGFzTG9naW5TdGF0ZVN5bmMoKTogQ3JlZGVudGlhbHMge1xuICAgIHJldHVybiB0aGlzLmF1dGhBcGkuaGFzTG9naW5TdGF0ZVN5bmMoKVxuICB9XG5cbiAgLyoqXG4gICAqIOWMv+WQjeeZu+W9lVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDcmVkZW50aWFscz59XG4gICAqIEBtZW1iZXJvZiBDbG91ZGJhc2VPQXV0aFxuICAgKi9cbiAgQHN0b3BPQXV0aExvZ2luV2l0aEF1dGgoKVxuICBwdWJsaWMgYXN5bmMgc2lnbkluQW5vbnltb3VzbHkoKTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIHJldHVybiB0aGlzLmF1dGhBcGkuc2lnbkluQW5vbnltb3VzbHkoKVxuICB9XG59XG5cbmNvbnN0IGNvbXBvbmVudDogSUNsb3VkYmFzZUNvbXBvbmVudCA9IHtcbiAgbmFtZTogQ09NUE9ORU5UX05BTUUsXG4gIG5hbWVzcGFjZTogJ29hdXRoJyxcbiAgZW50aXR5OiBmdW5jdGlvbiAoKSB7XG5cbiAgICBpZiAodGhpcy5vYXV0aEluc3RhbmNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZW52IH0gPSB0aGlzLmNvbmZpZztcbiAgICB0aGlzLm9hdXRoSW5zdGFuY2UgPSBuZXcgQ2xvdWRiYXNlT0F1dGgoe1xuICAgICAgY2xpZW50SWQ6IGVudixcbiAgICAgIGFwaU9yaWdpbjogZ2V0QmFzZUVuZFBvaW50KCksXG4gICAgICBfZnJvbUFwcDogdGhpc1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2U7XG4gIH1cbn1cblxudHJ5IHtcbiAgLy8g5bCd6K+V6Ieq5Yqo5rOo5YaM6Iez5YWo5bGA5Y+Y6YePY2xvdWRiYXNlXG4gIC8vIOatpOihjOS4uuWPquWcqOa1j+iniOWZqOeOr+Wig+S4i+acieaViFxuICBjbG91ZGJhc2UucmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50KTtcbn0gY2F0Y2ggKGUpIHsgfSJdfQ==

@@ -12,2 +12,5 @@ import { Credentials, AuthClientRequestOptions } from './models';

setItem(key: string, value: string): Promise<void>;
getItemSync(key: string): string | null;
removeItemSync(key: string): void;
setItemSync(key: string, value: string): void;
}

@@ -10,2 +10,2 @@ "use strict";

exports.AuthClient = AuthClient;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29hdXRoMmNsaWVudC9pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0E7SUFBQTtJQW9CQSxDQUFDO0lBQUQsaUJBQUM7QUFBRCxDQUFDLEFBcEJELElBb0JDO0FBcEJxQixnQ0FBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q3JlZGVudGlhbHMsIEF1dGhDbGllbnRSZXF1ZXN0T3B0aW9uc30gZnJvbSAnLi9tb2RlbHMnO1xuXG4vKipcbiAqIHRoZSBpbnRlcmZhY2UgZm9yIHRoZSBPYXV0aDJDbGllbnRcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEF1dGhDbGllbnQge1xuICAvKipcbiAgICogU2V0cyB0aGUgYXV0aCBjcmVkZW50aWFscy5cbiAgICovXG4gIGFic3RyYWN0IHNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHMpOiB2b2lkO1xuICAvKipcbiAgICogUHJvdmlkZXMgYW4gYWx0ZXJuYXRpdmUgZmV0Y2ggYXBpIHJlcXVlc3QgaW1wbGVtZW50YXRpb24gd2l0aCBhdXRoIGNyZWRlbnRpYWxzXG4gICAqIGlmIG9wdGlvbnMud2l0aENyZWRlbnRpYWxzOnRydWUsIHRoZSByZXF1ZXN0IHdpbGwgYXV0byBhZGQgQXV0aG9yaXphdGlvbjogQmVhcmVyIDxBY2Nlc3NUb2tlbj4gaW4gdGhlIHJlcXVlc3RcbiAgICogZXJyb3I6XG4gICAqICAgICAtIHVucmVhY2hhYmxlLCB0aGUgbmV0d29yayBlcnJvciBvciByZXNwb25zZSBpcyBub3QganNvblxuICAgKiAgICAgLSB1bmF1dGhlbnRpY2F0ZWQ6IGhhcyBubyB2YWxpZGF0ZSBhY2Nlc3MgdG9rZW5cbiAgICovXG4gIGFic3RyYWN0IHJlcXVlc3Q6IFJlcXVlc3RGdW5jdGlvbjtcblxuICAvKipcbiAgICogZ2V0IHRoZSBjdXJyZW50IGFjY2Vzc1Rva2VuIGZyb20gQXV0aENsaWVudCwgeW91IGNhbiB1c2UgdGhpcyB0byBkZXRlY3QgbG9naW4gc3RhdHVzXG4gICAqIGVycm9yOlxuICAgKiAgICAtICB1bmF1dGhlbnRpY2F0ZWQ6IGhhcyBubyB2YWxpZGF0ZSBhY2Nlc3MgdG9rZW5cbiAgICovXG4gIGFic3RyYWN0IGdldEFjY2Vzc1Rva2VuKCk6IFByb21pc2U8c3RyaW5nPjtcbn1cblxuZXhwb3J0IHR5cGUgUmVxdWVzdEZ1bmN0aW9uID0gPFQ+KHVybDogc3RyaW5nLG9wdGlvbnM/OiBBdXRoQ2xpZW50UmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VD47XG5cbi8qKiBBbiBpbnRlcmZhY2Ugb2YgdGhlIFNpbXBsZSAgV2ViIFN0b3JhZ2UgQVBJICAqL1xuZXhwb3J0IGludGVyZmFjZSBTaW1wbGVTdG9yYWdlIHtcbiAgLyoqXG4gICAqIHZhbHVlID0gc3RvcmFnZVtrZXldXG4gICAqL1xuICBnZXRJdGVtKGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPjtcbiAgLyoqXG4gICAqIGRlbGV0ZSBzdG9yYWdlW2tleV1cbiAgICovXG4gIHJlbW92ZUl0ZW0oa2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogc3RvcmFnZVtrZXldID0gdmFsdWVcbiAgICovXG4gIHNldEl0ZW0oa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29hdXRoMmNsaWVudC9pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0E7SUFBQTtJQW9CQSxDQUFDO0lBQUQsaUJBQUM7QUFBRCxDQUFDLEFBcEJELElBb0JDO0FBcEJxQixnQ0FBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENyZWRlbnRpYWxzLCBBdXRoQ2xpZW50UmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuL21vZGVscyc7XG5cbi8qKlxuICogdGhlIGludGVyZmFjZSBmb3IgdGhlIE9hdXRoMkNsaWVudFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXV0aENsaWVudCB7XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBhdXRoIGNyZWRlbnRpYWxzLlxuICAgKi9cbiAgYWJzdHJhY3Qgc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHM/OiBDcmVkZW50aWFscyk6IHZvaWQ7XG4gIC8qKlxuICAgKiBQcm92aWRlcyBhbiBhbHRlcm5hdGl2ZSBmZXRjaCBhcGkgcmVxdWVzdCBpbXBsZW1lbnRhdGlvbiB3aXRoIGF1dGggY3JlZGVudGlhbHNcbiAgICogaWYgb3B0aW9ucy53aXRoQ3JlZGVudGlhbHM6dHJ1ZSwgdGhlIHJlcXVlc3Qgd2lsbCBhdXRvIGFkZCBBdXRob3JpemF0aW9uOiBCZWFyZXIgPEFjY2Vzc1Rva2VuPiBpbiB0aGUgcmVxdWVzdFxuICAgKiBlcnJvcjpcbiAgICogICAgIC0gdW5yZWFjaGFibGUsIHRoZSBuZXR3b3JrIGVycm9yIG9yIHJlc3BvbnNlIGlzIG5vdCBqc29uXG4gICAqICAgICAtIHVuYXV0aGVudGljYXRlZDogaGFzIG5vIHZhbGlkYXRlIGFjY2VzcyB0b2tlblxuICAgKi9cbiAgYWJzdHJhY3QgcmVxdWVzdDogUmVxdWVzdEZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBnZXQgdGhlIGN1cnJlbnQgYWNjZXNzVG9rZW4gZnJvbSBBdXRoQ2xpZW50LCB5b3UgY2FuIHVzZSB0aGlzIHRvIGRldGVjdCBsb2dpbiBzdGF0dXNcbiAgICogZXJyb3I6XG4gICAqICAgIC0gIHVuYXV0aGVudGljYXRlZDogaGFzIG5vIHZhbGlkYXRlIGFjY2VzcyB0b2tlblxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0QWNjZXNzVG9rZW4oKTogUHJvbWlzZTxzdHJpbmc+O1xufVxuXG5leHBvcnQgdHlwZSBSZXF1ZXN0RnVuY3Rpb24gPSA8VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBBdXRoQ2xpZW50UmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VD47XG5cbi8qKiBBbiBpbnRlcmZhY2Ugb2YgdGhlIFNpbXBsZSAgV2ViIFN0b3JhZ2UgQVBJICAqL1xuZXhwb3J0IGludGVyZmFjZSBTaW1wbGVTdG9yYWdlIHtcbiAgLyoqXG4gICAqIHZhbHVlID0gc3RvcmFnZVtrZXldXG4gICAqL1xuICBnZXRJdGVtKGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPjtcbiAgLyoqXG4gICAqIGRlbGV0ZSBzdG9yYWdlW2tleV1cbiAgICovXG4gIHJlbW92ZUl0ZW0oa2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogc3RvcmFnZVtrZXldID0gdmFsdWVcbiAgICovXG4gIHNldEl0ZW0oa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiB2YWx1ZSA9IHN0b3JhZ2Vba2V5XVxuICAgKi9cbiAgZ2V0SXRlbVN5bmMoa2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsO1xuICAvKipcbiAgICogZGVsZXRlIHN0b3JhZ2Vba2V5XVxuICAgKi9cbiAgcmVtb3ZlSXRlbVN5bmMoa2V5OiBzdHJpbmcpOiB2b2lkO1xuICAvKipcbiAgICogc3RvcmFnZVtrZXldID0gdmFsdWVcbiAgICovXG4gIHNldEl0ZW1TeW5jKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZDtcbn1cbiJdfQ==

@@ -17,2 +17,5 @@ import { ErrorType } from './consts';

setItem(key: string, value: string): Promise<void>;
getItemSync(key: string): string | null;
removeItemSync(key: string): void;
setItemSync(key: string, value: string): void;
}

@@ -33,2 +36,3 @@ export declare const defaultStorage: DefaultStorage;

private _getStorageCredentials;
_getStorageCredentialsSync(): Credentials | null;
}

@@ -62,3 +66,5 @@ export declare class OAuth2Client implements AuthClient {

private _defaultRefreshTokenFunc;
private _getCredentials;
_getCredentials(): Promise<Credentials | null>;
getCredentialsSync(): Credentials | null;
getCredentialsAsync(): Promise<Credentials | null>;
private _getDeviceId;

@@ -65,0 +71,0 @@ private _unAuthenticatedError;

{
"name": "@cloudbase/oauth",
"version": "0.0.3-alpha.0",
"version": "0.0.4-alpha.0",
"description": "cloudbase javascript sdk auth componets",

@@ -29,3 +29,3 @@ "main": "./dist/index.js",

},
"gitHead": "d158e30a395d8fcd6b7c7e78a66006b194a3eddb"
"gitHead": "eb161dd3c79b90a95a877984bf7c07cdb4563077"
}
'use strict';
import {ApiUrls} from './consts';
import { ApiUrls } from './consts';
import {
GetVerificationRequest,
GetVerificationResponse,
UserProfile,
UserInfo,
SignInRequest,
SignUpRequest,
VerifyRequest,
VerifyResponse,
GenProviderRedirectUriRequest,
GenProviderRedirectUriResponse,
GrantProviderTokenRequest,
GrantProviderTokenResponse,
PatchProviderTokenRequest,
PatchProviderTokenResponse,
SignInWithProviderRequest,
BindWithProviderRequest,
TransByProviderRequest,
GrantTokenRequest,
UserProfileProvider,
UnbindProviderRequest,
CheckPasswordrRequest,
BindPhoneRequest,
SetPasswordRequest,
ChangeBindedProviderRequest,
ChangeBindedProviderResponse,
QueryUserProfileReq,
GetVerificationRequest,
GetVerificationResponse,
UserProfile,
UserInfo,
SignInRequest,
SignUpRequest,
VerifyRequest,
VerifyResponse,
GenProviderRedirectUriRequest,
GenProviderRedirectUriResponse,
GrantProviderTokenRequest,
GrantProviderTokenResponse,
PatchProviderTokenRequest,
PatchProviderTokenResponse,
SignInWithProviderRequest,
BindWithProviderRequest,
TransByProviderRequest,
GrantTokenRequest,
UserProfileProvider,
UnbindProviderRequest,
CheckPasswordrRequest,
BindPhoneRequest,
SetPasswordRequest,
ChangeBindedProviderRequest,
ChangeBindedProviderResponse,
QueryUserProfileReq,
} from './models';
import {SimpleStorage, RequestFunction} from '../oauth2client/interface';
import {OAuth2Client, defaultStorage} from '../oauth2client/oauth2client';
import {Credentials} from '../oauth2client/models';
import {Captcha} from '../captcha/captcha';
import { SimpleStorage, RequestFunction } from '../oauth2client/interface';
import { OAuth2Client, defaultStorage } from '../oauth2client/oauth2client';
import { Credentials } from '../oauth2client/models';
import { Captcha } from '../captcha/captcha';
import { ICloudbase } from '@cloudbase/types';
export interface AuthOptions {
apiOrigin: string;
clientId: string;
credentialsClient?: OAuth2Client;
request?: RequestFunction;
storage?: SimpleStorage;
apiOrigin: string;
clientId: string;
credentialsClient?: OAuth2Client;
request?: RequestFunction;
storage?: SimpleStorage;
_fromApp?: ICloudbase // 所属cloudbase app对象
}

@@ -49,437 +52,457 @@

export class Auth {
private _config: AuthOptions;
private _config: AuthOptions;
/**
* constructor
* @param {AuthOptions} opts
*/
constructor(opts: AuthOptions) {
let request = opts.request;
let oAuth2Client = opts.credentialsClient;
if (!oAuth2Client) {
const initOptions = {
apiOrigin: opts.apiOrigin,
clientId: opts.clientId,
storage: opts.storage,
};
oAuth2Client = new OAuth2Client(initOptions);
}
if (!request) {
const baseRequest = oAuth2Client.request.bind(oAuth2Client);
const captcha = new Captcha({
clientId: opts.clientId,
request: baseRequest,
storage: opts.storage,
})
request = captcha.request.bind(captcha)
}
this._config = {
apiOrigin: opts.apiOrigin,
clientId: opts.clientId,
request: request,
credentialsClient: oAuth2Client,
storage: opts.storage || defaultStorage,
};
/**
* constructor
* @param {AuthOptions} opts
*/
constructor(opts: AuthOptions) {
let request = opts.request;
let oAuth2Client = opts.credentialsClient;
if (!oAuth2Client) {
const initOptions = {
apiOrigin: opts.apiOrigin,
clientId: opts.clientId,
storage: opts.storage,
};
oAuth2Client = new OAuth2Client(initOptions);
}
/**
* Sign in.
* @param {SignInRequest} params A SignInRequest Object.
* @return {Promise<Credentials>} A Promise<Credentials> object.
*/
public async signIn(params: SignInRequest): Promise<Credentials> {
params.client_id = this._config.clientId;
const credentials: Credentials = await this._config.request<Credentials>(
ApiUrls.AUTH_SIGN_IN_URL,
{
method: 'POST',
body: params
},
);
await this._config.credentialsClient.setCredentials(credentials);
return Promise.resolve(credentials);
if (!request) {
const baseRequest = oAuth2Client.request.bind(oAuth2Client);
const captcha = new Captcha({
clientId: opts.clientId,
request: baseRequest,
storage: opts.storage,
})
request = captcha.request.bind(captcha)
}
this._config = {
apiOrigin: opts.apiOrigin,
clientId: opts.clientId,
request: request,
credentialsClient: oAuth2Client,
storage: opts.storage || defaultStorage,
};
}
/**
* Sign in Anonymously
* @return {Promise<Credentials>} A Promise<Credentials> object.
*/
public async signInAnonymously(): Promise<Credentials> {
const credentials: Credentials = await this._config.request<Credentials>(
ApiUrls.AUTH_SIGN_IN_ANONYMOUSLY_URL,
{
method: 'POST',
body: {
client_id: this._config.clientId
}
},
);
await this._config.credentialsClient.setCredentials(credentials);
return Promise.resolve(credentials);
}
/**
* Sign in.
* @param {SignInRequest} params A SignInRequest Object.
* @return {Promise<Credentials>} A Promise<Credentials> object.
*/
public async signIn(params: SignInRequest): Promise<Credentials> {
params.client_id = this._config.clientId;
const credentials: Credentials = await this._config.request<Credentials>(
ApiUrls.AUTH_SIGN_IN_URL,
{
method: 'POST',
body: params
},
);
await this._config.credentialsClient.setCredentials(credentials);
return Promise.resolve(credentials);
}
/**
* Sign up.
* @param {SignUpRequest} params A SignUpRequest Object.
* @return {Promise<Credentials>} A Promise<Credentials> object.
*/
protected async signUp(params: SignUpRequest): Promise<Credentials> {
params.client_id = this._config.clientId;
const data: Credentials = await this._config.request<Credentials>(
ApiUrls.AUTH_SIGN_UP_URL,
{
method: 'POST',
body: params,
},
);
await this._config.credentialsClient.setCredentials(data);
return Promise.resolve(data);
}
/**
* Sign in Anonymously
* @return {Promise<Credentials>} A Promise<Credentials> object.
*/
public async signInAnonymously(): Promise<Credentials> {
const credentials: Credentials = await this._config.request<Credentials>(
ApiUrls.AUTH_SIGN_IN_ANONYMOUSLY_URL,
{
method: 'POST',
body: {
client_id: this._config.clientId
}
},
);
await this._config.credentialsClient.setCredentials(credentials);
return Promise.resolve(credentials);
}
/**
* Sign out.
* @return {Object} A Promise<void> object.
*/
public async signOut(): Promise<void> {
const accessToken: string = await this._config.credentialsClient.getAccessToken();
const data = await this._config.request<void>(ApiUrls.AUTH_REVOKE_URL, {
method: 'POST',
body: {
client_id: this._config.clientId,
token: accessToken,
},
});
await this._config.credentialsClient.setCredentials();
return Promise.resolve(data);
}
/**
* Sign up.
* @param {SignUpRequest} params A SignUpRequest Object.
* @return {Promise<Credentials>} A Promise<Credentials> object.
*/
protected async signUp(params: SignUpRequest): Promise<Credentials> {
params.client_id = this._config.clientId;
const data: Credentials = await this._config.request<Credentials>(
ApiUrls.AUTH_SIGN_UP_URL,
{
method: 'POST',
body: params,
},
);
await this._config.credentialsClient.setCredentials(data);
return Promise.resolve(data);
}
/**
* Get the verification.
* @param {GetVerificationRequest} params A GetVerificationRequest Object.
* @return {Promise<GetVerificationResponse>} A Promise<GetVerificationResponse> object.
*/
public async getVerification(
params: GetVerificationRequest,
): Promise<GetVerificationResponse> {
params.client_id = this._config.clientId;
return this._config.request<GetVerificationResponse>(
ApiUrls.VERIFICATION_URL,
{
method: 'POST',
body: params,
withCaptcha: true
},
);
}
/**
* Sign out.
* @return {Object} A Promise<void> object.
*/
public async signOut(): Promise<any> {
const accessToken: string = await this._config.credentialsClient.getAccessToken();
const data = await this._config.request(ApiUrls.AUTH_REVOKE_URL, {
method: 'POST',
body: {
client_id: this._config.clientId,
token: accessToken,
},
});
await this._config.credentialsClient.setCredentials();
return Promise.resolve(data);
}
/**
* Verify the code
* @param {VerifyRequest} params A VerifyRequest Object.
* @return {Promise<VerifyResponse>} A Promise<VerifyResponse> object.
*/
public async verify(params: VerifyRequest): Promise<VerifyResponse> {
params.client_id = this._config.clientId;
return this._config.request<VerifyResponse>(ApiUrls.VERIFY_URL, {
method: 'POST',
body: params,
});
}
/**
* Get the verification.
* @param {GetVerificationRequest} params A GetVerificationRequest Object.
* @return {Promise<GetVerificationResponse>} A Promise<GetVerificationResponse> object.
*/
public async getVerification(
params: GetVerificationRequest,
): Promise<GetVerificationResponse> {
params.client_id = this._config.clientId;
return this._config.request<GetVerificationResponse>(
ApiUrls.VERIFICATION_URL,
{
method: 'POST',
body: params,
withCaptcha: true
},
);
}
/**
* Gen provider redirect uri.
* @param {GenProviderRedirectUriRequest} params A GenProviderRedirectUriRequest object.
* @return {Promise<GenProviderRedirectUriResponse>} A Promise<GenProviderRedirectUriResponse> object.
*/
public async genProviderRedirectUri(
params: GenProviderRedirectUriRequest,
): Promise<GenProviderRedirectUriResponse> {
let url = `${ApiUrls.PROVIDER_URI_URL}?client_id=${
this._config.clientId
}&provider_id=${params.provider_id}&redirect_uri=${encodeURIComponent(
params.provider_redirect_uri,
)}&state=${params.state}`;
const other_params = params.other_params;
if (other_params) {
if (
typeof other_params.sign_out_uri === 'string' &&
other_params.sign_out_uri.length > 0
) {
url += `&other_params[sign_out_uri]=${other_params.sign_out_uri}`;
}
}
return this._config.request<GenProviderRedirectUriResponse>(url, {
method: 'GET',
});
}
/**
* Verify the code
* @param {VerifyRequest} params A VerifyRequest Object.
* @return {Promise<VerifyResponse>} A Promise<VerifyResponse> object.
*/
public async verify(params: VerifyRequest): Promise<VerifyResponse> {
params.client_id = this._config.clientId;
return this._config.request<VerifyResponse>(ApiUrls.VERIFY_URL, {
method: 'POST',
body: params,
});
}
/**
* Grant provider token.
* @param {GrantProviderTokenRequest} params A GrantProviderTokenRequest object.
* @return {Promise<GrantProviderTokenResponse>} A Promise<GrantProviderTokenResponse> object.
*/
public async grantProviderToken(
params: GrantProviderTokenRequest,
): Promise<GrantProviderTokenResponse> {
params.client_id = this._config.clientId;
return this._config.request<GrantProviderTokenResponse>(
ApiUrls.PROVIDER_TOKEN_URL,
{
method: 'POST',
body: params,
},
);
/**
* Gen provider redirect uri.
* @param {GenProviderRedirectUriRequest} params A GenProviderRedirectUriRequest object.
* @return {Promise<GenProviderRedirectUriResponse>} A Promise<GenProviderRedirectUriResponse> object.
*/
public async genProviderRedirectUri(
params: GenProviderRedirectUriRequest,
): Promise<GenProviderRedirectUriResponse> {
let url = `${ApiUrls.PROVIDER_URI_URL}?client_id=${this._config.clientId
}&provider_id=${params.provider_id}&redirect_uri=${encodeURIComponent(
params.provider_redirect_uri,
)}&state=${params.state}`;
const other_params = params.other_params;
if (other_params) {
if (
typeof other_params.sign_out_uri === 'string' &&
other_params.sign_out_uri.length > 0
) {
url += `&other_params[sign_out_uri]=${other_params.sign_out_uri}`;
}
}
return this._config.request<GenProviderRedirectUriResponse>(url, {
method: 'GET',
});
}
/**
* Grant provider token.
* @param {PatchProviderTokenRequest} params A PatchProviderTokenRequest object.
* @return {Promise<PatchProviderTokenResponse>} A Promise<PatchProviderTokenResponse> object.
*/
public async patchProviderToken(
params: PatchProviderTokenRequest,
): Promise<PatchProviderTokenResponse> {
params.client_id = this._config.clientId;
return this._config.request<PatchProviderTokenResponse>(
ApiUrls.PROVIDER_TOKEN_URL,
{
method: 'PATCH',
body: params,
},
);
}
/**
* Grant provider token.
* @param {GrantProviderTokenRequest} params A GrantProviderTokenRequest object.
* @return {Promise<GrantProviderTokenResponse>} A Promise<GrantProviderTokenResponse> object.
*/
public async grantProviderToken(
params: GrantProviderTokenRequest,
): Promise<GrantProviderTokenResponse> {
params.client_id = this._config.clientId;
return this._config.request<GrantProviderTokenResponse>(
ApiUrls.PROVIDER_TOKEN_URL,
{
method: 'POST',
body: params,
},
);
}
/**
* Signin with provider request.
* @param {SignInWithProviderRequest} params A SignInWithProviderRequest object.
* @return {Promise<Credentials>} A Promise<Credentials> object.
*/
public async signInWithProvider(
params: SignInWithProviderRequest,
): Promise<Credentials> {
params.client_id = this._config.clientId;
const credentials: Credentials = await this._config.request<Credentials>(
ApiUrls.AUTH_SIGN_IN_WITH_PROVIDER_URL,
{
method: 'POST',
body: params,
},
);
await this._config.credentialsClient.setCredentials(credentials);
return Promise.resolve(credentials);
}
/**
* Grant provider token.
* @param {PatchProviderTokenRequest} params A PatchProviderTokenRequest object.
* @return {Promise<PatchProviderTokenResponse>} A Promise<PatchProviderTokenResponse> object.
*/
public async patchProviderToken(
params: PatchProviderTokenRequest,
): Promise<PatchProviderTokenResponse> {
params.client_id = this._config.clientId;
return this._config.request<PatchProviderTokenResponse>(
ApiUrls.PROVIDER_TOKEN_URL,
{
method: 'PATCH',
body: params,
},
);
}
/**
* Bind with provider
* @param {BindWithProviderRequest} params A BindWithProviderRequest object.
* @return {Promise<void>} A Promise<any> object.
*/
public async bindWithProvider(
params: BindWithProviderRequest,
): Promise<void> {
params.client_id = this._config.clientId;
return this._config.request<any>(ApiUrls.PROVIDER_BIND_URL, {
method: 'POST',
body: params,
withCredentials: true,
});
}
/**
* Signin with provider request.
* @param {SignInWithProviderRequest} params A SignInWithProviderRequest object.
* @return {Promise<Credentials>} A Promise<Credentials> object.
*/
public async signInWithProvider(
params: SignInWithProviderRequest,
): Promise<Credentials> {
params.client_id = this._config.clientId;
const credentials: Credentials = await this._config.request<Credentials>(
ApiUrls.AUTH_SIGN_IN_WITH_PROVIDER_URL,
{
method: 'POST',
body: params,
},
);
await this._config.credentialsClient.setCredentials(credentials);
return Promise.resolve(credentials);
}
/**
* Get the user profile.
* @return {Promise<UserProfile>} A Promise<UserProfile> object.
*/
public async getUserProfile(): Promise<UserProfile> {
return this.getUserInfo();
}
/**
* Bind with provider
* @param {BindWithProviderRequest} params A BindWithProviderRequest object.
* @return {Promise<void>} A Promise<any> object.
*/
public async bindWithProvider(
params: BindWithProviderRequest,
): Promise<void> {
params.client_id = this._config.clientId;
return this._config.request<any>(ApiUrls.PROVIDER_BIND_URL, {
method: 'POST',
body: params,
withCredentials: true,
});
}
/**
* Get the user info.
* @return {Promise<UserInfo>} A Promise<UserProfile> object.
*/
public async getUserInfo(): Promise<UserInfo> {
return this._config.request<UserInfo>(ApiUrls.USER_ME_URL, {
method: 'GET',
withCredentials: true,
});
}
/**
* Get the user profile.
* @return {Promise<UserProfile>} A Promise<UserProfile> object.
*/
public async getUserProfile(): Promise<UserProfile> {
return this.getUserInfo();
}
/**
* hasLoginState check if has login state
* @return {Promise<boolean>} A Promise<boolean> object.
*/
public async hasLoginState(): Promise<boolean> {
try {
await this._config.credentialsClient.getAccessToken()
return true
} catch (error) {
return false
}
/**
* Get the user info.
* @return {Promise<UserInfo>} A Promise<UserProfile> object.
*/
public async getUserInfo(): Promise<UserInfo> {
const userInfo = await this._config.request<UserInfo>(ApiUrls.USER_ME_URL, {
method: 'GET',
withCredentials: true,
});
if (userInfo.picture) {
userInfo.avatarUrl = userInfo.picture;
}
/**
* Trans by provider.
* @param {TransByProviderRequest} params A TransByProviderRequest object.
* @return {Promise<Credentials>} A Promise<Credentials> object.
*/
public async transByProvider(
params: TransByProviderRequest,
): Promise<Credentials> {
return this._config.request<Credentials>(
ApiUrls.USER_TRANS_BY_PROVIDER_URL,
{
method: 'PATCH',
body: params,
withCredentials: true,
},
);
if (userInfo.sub) {
userInfo.uid = userInfo.sub
}
/**
* Grant token.
* @param {GrantTokenRequest} params A GrantTokenRequest object.
* @return {Promise<Credentials>} A Promise<Credentials> object.
*/
public async grantToken(params: GrantTokenRequest): Promise<Credentials> {
params.client_id = this._config.clientId;
return this._config.request<Credentials>(ApiUrls.AUTH_TOKEN_URL, {
method: 'POST',
body: params,
});
if (userInfo.name) {
userInfo.username = userInfo.name
}
return userInfo;
}
/**
* Get the provide list.
* @return {Promise<UserProfileProvider>} A Promise<UserProfileProvider> object.
*/
public async getProviders(): Promise<UserProfileProvider> {
return this._config.request<UserProfileProvider>(ApiUrls.PROVIDER_LIST, {
method: 'GET',
withCredentials: true,
});
/**
* hasLoginState check if has login state
* @return {Promise<boolean>} A Promise<boolean> object.
*/
public async hasLoginState(): Promise<boolean> {
try {
await this._config.credentialsClient.getAccessToken()
return true
} catch (error) {
return false
}
}
/**
* unbind provider.
* @param {UnbindProviderRequest} params
* @return {Promise<any>}
*/
public async unbindProvider(params: UnbindProviderRequest): Promise<void> {
params.client_id = this._config.clientId;
return this._config.request<any>(
`${ApiUrls.PROVIDER_UNBIND_URL}/${params.provider_id}`,
{
method: 'DELETE',
withCredentials: true,
},
);
}
public hasLoginStateSync(): Credentials | null {
const credentials = this._config.credentialsClient.getCredentialsSync()
return credentials
}
/**
* check Password.
* @param {CheckPasswordrRequest} params
* @return {Promise<any>}
*/
public async checkPassword(params: CheckPasswordrRequest): Promise<void> {
return this._config.request<any>(`${ApiUrls.CHECK_PWD_URL}`, {
method: 'POST',
withCredentials: true,
body: params,
});
}
public async getLoginState(): Promise<Credentials | null> {
return this._config.credentialsClient.getCredentialsAsync()
}
/**
* check Password.
* @param {CheckPasswordrRequest} params
* @return {Promise<any>}
*/
public async bindPhone(params: BindPhoneRequest): Promise<void> {
return this._config.request<any>(`${ApiUrls.BIND_PHONE_URL}`, {
method: 'PATCH',
withCredentials: true,
body: params,
});
}
/**
* Trans by provider.
* @param {TransByProviderRequest} params A TransByProviderRequest object.
* @return {Promise<Credentials>} A Promise<Credentials> object.
*/
public async transByProvider(
params: TransByProviderRequest,
): Promise<Credentials> {
return this._config.request<Credentials>(
ApiUrls.USER_TRANS_BY_PROVIDER_URL,
{
method: 'PATCH',
body: params,
withCredentials: true,
},
);
}
/**
* Set Password.
* @param {SetPasswordrRequest} params
* @return {Promise<any>}
*/
public async setPassword(params: SetPasswordRequest): Promise<void> {
return this._config.request<any>(`${ApiUrls.AUTH_SET_PASSWORD}`, {
method: 'PATCH',
withCredentials: true,
body: params,
});
}
/**
* Grant token.
* @param {GrantTokenRequest} params A GrantTokenRequest object.
* @return {Promise<Credentials>} A Promise<Credentials> object.
*/
public async grantToken(params: GrantTokenRequest): Promise<Credentials> {
params.client_id = this._config.clientId;
return this._config.request<Credentials>(ApiUrls.AUTH_TOKEN_URL, {
method: 'POST',
body: params,
});
}
/**
* Get the current user verification.
* @param {GetVerificationRequest} params A GetVerificationRequest Object.
* @return {Promise<GetVerificationResponse>} A Promise<GetVerificationResponse> object.
*/
public async getCurUserVerification(
params: GetVerificationRequest,
): Promise<GetVerificationResponse> {
params.client_id = this._config.clientId;
params.target = 'CUR_USER';
return this._config.request<GetVerificationResponse>(
ApiUrls.VERIFICATION_URL,
{
method: 'POST',
body: params,
withCredentials: true,
withCaptcha: true
},
);
}
/**
* Get the provide list.
* @return {Promise<UserProfileProvider>} A Promise<UserProfileProvider> object.
*/
public async getProviders(): Promise<UserProfileProvider> {
return this._config.request<UserProfileProvider>(ApiUrls.PROVIDER_LIST, {
method: 'GET',
withCredentials: true,
});
}
/**
* change binded provider.
* @param {GetVerificationRequest} params A GetVerificationRequest Object.
* @return {Promise<GetVerificationResponse>} A Promise<GetVerificationResponse> object.
*/
public async changeBindedProvider(
params: ChangeBindedProviderRequest,
): Promise<ChangeBindedProviderResponse> {
params.client_id = this._config.clientId;
return this._config.request<ChangeBindedProviderResponse>(
`${ApiUrls.PROVIDER_LIST}/${params.provider_id}/trans`,
{
method: 'POST',
body: {
provider_trans_token: params.trans_token,
},
withCredentials: true,
},
);
}
/**
* unbind provider.
* @param {UnbindProviderRequest} params
* @return {Promise<any>}
*/
public async unbindProvider(params: UnbindProviderRequest): Promise<void> {
params.client_id = this._config.clientId;
return this._config.request<any>(
`${ApiUrls.PROVIDER_UNBIND_URL}/${params.provider_id}`,
{
method: 'DELETE',
withCredentials: true,
},
);
}
/**
* Patch the user profile.
* @param {UserProfile} params A UserProfile Object.
* @return {Promise<UserProfile>} A Promise<UserProfile> object.
*/
public async setUserProfile(params: UserProfile): Promise<UserProfile> {
return this._config.request<UserProfile>(ApiUrls.USER_PRIFILE_URL, {
method: 'PATCH',
body: params,
withCredentials: true,
});
}
/**
* check Password.
* @param {CheckPasswordrRequest} params
* @return {Promise<any>}
*/
public async checkPassword(params: CheckPasswordrRequest): Promise<void> {
return this._config.request<any>(`${ApiUrls.CHECK_PWD_URL}`, {
method: 'POST',
withCredentials: true,
body: params,
});
}
/**
* Patch the user profile.
* @param {QueryUserProfileReq} appended_params A QueryUserProfileReq Object.
* @return {Promise<UserProfile>} A Promise<UserProfile> object.
*/
public async queryUserProfile(
appended_params: QueryUserProfileReq,
): Promise<UserProfile> {
const url = `${ApiUrls.USER_QUERY_URL}${appended_params}`;
return this._config.request<UserProfile>(url, {
method: 'GET',
withCredentials: true,
});
}
/**
* check Password.
* @param {CheckPasswordrRequest} params
* @return {Promise<any>}
*/
public async bindPhone(params: BindPhoneRequest): Promise<void> {
return this._config.request<any>(`${ApiUrls.BIND_PHONE_URL}`, {
method: 'PATCH',
withCredentials: true,
body: params,
});
}
/**
* Set Password.
* @param {SetPasswordrRequest} params
* @return {Promise<any>}
*/
public async setPassword(params: SetPasswordRequest): Promise<void> {
return this._config.request<any>(`${ApiUrls.AUTH_SET_PASSWORD}`, {
method: 'PATCH',
withCredentials: true,
body: params,
});
}
/**
* Get the current user verification.
* @param {GetVerificationRequest} params A GetVerificationRequest Object.
* @return {Promise<GetVerificationResponse>} A Promise<GetVerificationResponse> object.
*/
public async getCurUserVerification(
params: GetVerificationRequest,
): Promise<GetVerificationResponse> {
params.client_id = this._config.clientId;
params.target = 'CUR_USER';
return this._config.request<GetVerificationResponse>(
ApiUrls.VERIFICATION_URL,
{
method: 'POST',
body: params,
withCredentials: true,
withCaptcha: true
},
);
}
/**
* change binded provider.
* @param {GetVerificationRequest} params A GetVerificationRequest Object.
* @return {Promise<GetVerificationResponse>} A Promise<GetVerificationResponse> object.
*/
public async changeBindedProvider(
params: ChangeBindedProviderRequest,
): Promise<ChangeBindedProviderResponse> {
params.client_id = this._config.clientId;
return this._config.request<ChangeBindedProviderResponse>(
`${ApiUrls.PROVIDER_LIST}/${params.provider_id}/trans`,
{
method: 'POST',
body: {
provider_trans_token: params.trans_token,
},
withCredentials: true,
},
);
}
/**
* Patch the user profile.
* @param {UserProfile} params A UserProfile Object.
* @return {Promise<UserProfile>} A Promise<UserProfile> object.
*/
public async setUserProfile(params: UserProfile): Promise<UserProfile> {
return this._config.request<UserProfile>(ApiUrls.USER_PRIFILE_URL, {
method: 'PATCH',
body: params,
withCredentials: true,
});
}
/**
* Patch the user profile.
* @param {QueryUserProfileReq} appended_params A QueryUserProfileReq Object.
* @return {Promise<UserProfile>} A Promise<UserProfile> object.
*/
public async queryUserProfile(
appended_params: QueryUserProfileReq,
): Promise<UserProfile> {
const url = `${ApiUrls.USER_QUERY_URL}${appended_params}`;
return this._config.request<UserProfile>(url, {
method: 'GET',
withCredentials: true,
});
}
}

@@ -114,2 +114,3 @@ interface BaseRequest {

picture?: string;
avatarUrl?: string;
username?: string;

@@ -125,2 +126,4 @@ email?: string;

created_from?: string;
sub?: string
uid?: string
}

@@ -127,0 +130,0 @@

@@ -1,3 +0,11 @@

export {Syntax, ErrorType} from './oauth2client/consts';
import { ICloudbaseComponent } from '@cloudbase/types/component';
import { ICloudbase } from '@cloudbase/types';
import { getBaseEndPoint } from '@cloudbase/app'
import { helpers } from '@cloudbase/utilities'
const { stopOAuthLoginWithAuth } = helpers
export { Syntax, ErrorType } from './oauth2client/consts';
import { OAuth2Client } from './oauth2client/oauth2client'
export {

@@ -12,4 +20,5 @@ defaultStorage,

export {AuthClient, SimpleStorage} from './oauth2client/interface';
export { AuthClient, SimpleStorage } from './oauth2client/interface';
import { Credentials } from './oauth2client/models'
export {

@@ -22,5 +31,123 @@ Credentials,

export {AuthOptions, Auth} from './auth/apis';
import { AuthOptions, Auth } from './auth/apis'
export { AuthOptions, Auth } from './auth/apis';
import * as authModels from './auth/models';
export {authModels};
export { authModels };
declare const cloudbase: ICloudbase;
const COMPONENT_NAME = 'oauth';
class CloudbaseOAuth {
public oauth2client: OAuth2Client
public authApi: Auth
private _fromApp: ICloudbase
constructor(authOptions: AuthOptions) {
const { apiOrigin, clientId, _fromApp } = authOptions
this._fromApp = _fromApp
this.oauth2client = new OAuth2Client({
apiOrigin,
clientId
})
this.authApi = new Auth({
credentialsClient: this.oauth2client,
...authOptions
})
}
public async checkFromAuthV1OrV2() {
const { _fromApp } = this
const authInstance = _fromApp.authInstance
const oauthInstance = _fromApp.oauthInstance || (_fromApp as any).oauth()
const authLogin = authInstance && await authInstance.getLoginState()
if (authLogin) {
return 'auth'
}
const oauthLogin = oauthInstance && await oauthInstance.hasLoginState()
if (oauthLogin) {
return 'oauth'
}
return ''
}
/**
* 登录
* @param {authModels.SignInRequest} params
* @returns {Promise<Credentials>}
* @memberof CloudbaseOAuth
*/
@stopOAuthLoginWithAuth()
public async signIn(params: authModels.SignInRequest): Promise<Credentials> {
return this.authApi.signIn(params)
}
public async signOut(): Promise<any> {
return this.authApi.signOut()
}
/**
* check 当前是否已 oauth 登录
* @returns {Promise<boolean>}
* @memberof CloudbaseOAuth
*/
public async hasLoginState(): Promise<boolean> {
return this.authApi.hasLoginState()
}
public async getUserInfo(): Promise<authModels.UserProfile> {
return this.authApi.getUserInfo()
}
/**
* 获取 oauth 登录态
* @returns {Promise<boolean>}
* @memberof CloudbaseOAuth
*/
public async getLoginState(): Promise<Credentials> {
return this.authApi.getLoginState()
}
public hasLoginStateSync(): Credentials {
return this.authApi.hasLoginStateSync()
}
/**
* 匿名登录
* @returns {Promise<Credentials>}
* @memberof CloudbaseOAuth
*/
@stopOAuthLoginWithAuth()
public async signInAnonymously(): Promise<Credentials> {
return this.authApi.signInAnonymously()
}
}
const component: ICloudbaseComponent = {
name: COMPONENT_NAME,
namespace: 'oauth',
entity: function () {
if (this.oauthInstance) {
return this.oauthInstance;
}
const { env } = this.config;
this.oauthInstance = new CloudbaseOAuth({
clientId: env,
apiOrigin: getBaseEndPoint(),
_fromApp: this
});
return this.oauthInstance;
}
}
try {
// 尝试自动注册至全局变量cloudbase
// 此行为只在浏览器环境下有效
cloudbase.registerComponent(component);
} catch (e) { }

@@ -1,2 +0,2 @@

import {Credentials, AuthClientRequestOptions} from './models';
import { Credentials, AuthClientRequestOptions } from './models';

@@ -28,3 +28,3 @@ /**

export type RequestFunction = <T>(url: string,options?: AuthClientRequestOptions) => Promise<T>;
export type RequestFunction = <T>(url: string, options?: AuthClientRequestOptions) => Promise<T>;

@@ -45,2 +45,15 @@ /** An interface of the Simple Web Storage API */

setItem(key: string, value: string): Promise<void>;
/**
* value = storage[key]
*/
getItemSync(key: string): string | null;
/**
* delete storage[key]
*/
removeItemSync(key: string): void;
/**
* storage[key] = value
*/
setItemSync(key: string, value: string): void;
}

@@ -1,17 +0,17 @@

import {ErrorType} from './consts';
import { ErrorType } from './consts';
import {AuthClient, SimpleStorage} from './interface';
import { AuthClient, SimpleStorage } from './interface';
import {
Credentials,
ResponseError,
RequestOptions,
RequestFunction,
OAuth2ClientOptions,
AuthClientRequestOptions,
Credentials,
ResponseError,
RequestOptions,
RequestFunction,
OAuth2ClientOptions,
AuthClientRequestOptions,
} from './models';
import {uuidv4} from '../utils/uuid';
import { uuidv4 } from '../utils/uuid';
import {SinglePromise} from '../utils/function/single-promise';
import { SinglePromise } from '../utils/function/single-promise';

@@ -23,69 +23,69 @@ const RequestIdHeaderName = 'x-request-id';

export interface ToResponseErrorOptions {
error?: ErrorType;
error_description?: string | null;
error_uri?: string | null;
details?: any | null;
error?: ErrorType;
error_description?: string | null;
error_uri?: string | null;
details?: any | null;
}
export const defaultRequest: RequestFunction = async <T>(
url: string,
options?: RequestOptions,
url: string,
options?: RequestOptions,
): Promise<T> => {
let result: T | null = null;
let responseError: ResponseError | null = null;
try {
// Objects must be copied to prevent modification of data such as body.
const copyOptions = Object.assign({}, options);
if (!copyOptions.method) {
copyOptions.method = 'GET';
}
if (copyOptions.body && typeof copyOptions.body !== 'string') {
copyOptions.body = JSON.stringify(copyOptions.body);
}
const responseResult: Response = await fetch(url, copyOptions);
const jsonResponse = await responseResult.json();
if (jsonResponse && jsonResponse.error) {
responseError = jsonResponse as ResponseError;
responseError.error_uri = new URL(url).pathname;
} else {
result = jsonResponse as T;
}
} catch (error) {
responseError = {
error: ErrorType.UNREACHABLE,
error_description: error.message,
error_uri: new URL(url).pathname,
};
let result: T | null = null;
let responseError: ResponseError | null = null;
try {
// Objects must be copied to prevent modification of data such as body.
const copyOptions = Object.assign({}, options);
if (!copyOptions.method) {
copyOptions.method = 'GET';
}
if (responseError) {
throw responseError;
if (copyOptions.body && typeof copyOptions.body !== 'string') {
copyOptions.body = JSON.stringify(copyOptions.body);
}
const responseResult: Response = await fetch(url, copyOptions);
const jsonResponse = await responseResult.json();
if (jsonResponse?.error) {
responseError = jsonResponse as ResponseError;
responseError.error_uri = new URL(url).pathname;
} else {
return result;
result = jsonResponse as T;
}
} catch (error) {
responseError = {
error: ErrorType.UNREACHABLE,
error_description: error.message,
error_uri: new URL(url).pathname,
};
}
if (responseError) {
throw responseError;
} else {
return result;
}
};
export const toResponseError = (
error: ResponseError | Error,
options?: ToResponseErrorOptions,
error: ResponseError | Error,
options?: ToResponseErrorOptions,
): ResponseError => {
let responseError: ResponseError;
const formatOptions: ToResponseErrorOptions = options || {};
if (error instanceof Error) {
responseError = {
error: formatOptions.error || ErrorType.LOCAL,
error_description: formatOptions.error_description || error.message,
error_uri: formatOptions.error_uri,
details: formatOptions.details || error.stack,
};
} else {
const formatError: ToResponseErrorOptions = error || {};
responseError = {
error: formatOptions.error || formatError.error || ErrorType.LOCAL,
error_description:
formatOptions.error_description || formatError.error_description,
error_uri: formatOptions.error_uri || formatError.error_uri,
details: formatOptions.details || formatError.details,
};
}
return responseError;
let responseError: ResponseError;
const formatOptions: ToResponseErrorOptions = options || {};
if (error instanceof Error) {
responseError = {
error: formatOptions.error || ErrorType.LOCAL,
error_description: formatOptions.error_description || error.message,
error_uri: formatOptions.error_uri,
details: formatOptions.details || error.stack,
};
} else {
const formatError: ToResponseErrorOptions = error || {};
responseError = {
error: formatOptions.error || formatError.error || ErrorType.LOCAL,
error_description:
formatOptions.error_description || formatError.error_description,
error_uri: formatOptions.error_uri || formatError.error_uri,
details: formatOptions.details || formatError.details,
};
}
return responseError;
};

@@ -98,3 +98,3 @@

export function generateRequestId(): string {
return uuidv4();
return uuidv4();
}

@@ -107,19 +107,19 @@

class DefaultStorage implements SimpleStorage {
/**
/**
* Get item.
* @param {string} key
*/
async getItem(key: string): Promise<string | null> {
return window.localStorage.getItem(key);
}
async getItem(key: string): Promise<string | null> {
return window.localStorage.getItem(key);
}
/**
/**
* Remove item.
* @param {string} key
*/
async removeItem(key: string): Promise<void> {
window.localStorage.removeItem(key);
}
async removeItem(key: string): Promise<void> {
window.localStorage.removeItem(key);
}
/**
/**
* Set item.

@@ -129,5 +129,30 @@ * @param {string} key

*/
async setItem(key: string, value: string): Promise<void> {
window.localStorage.setItem(key, value);
}
async setItem(key: string, value: string): Promise<void> {
window.localStorage.setItem(key, value);
}
/**
* Get item sync.
* @param {string} key
*/
getItemSync(key: string): string | null {
return window.localStorage.getItem(key);
}
/**
* Remove item sync.
* @param {string} key
*/
removeItemSync(key: string): void {
window.localStorage.removeItem(key);
}
/**
* Set item sync.
* @param {string} key
* @param {string} value
*/
setItemSync(key: string, value: string): void {
window.localStorage.setItem(key, value);
}
}

@@ -138,4 +163,4 @@

interface LocalCredentialsOptions {
tokenSectionName: string;
storage: SimpleStorage;
tokenSectionName: string;
storage: SimpleStorage;
}

@@ -149,7 +174,7 @@

function isCredentialsExpired(credentials: Credentials): boolean {
let isExpired = true;
if (credentials && credentials.expires_at && credentials.access_token) {
isExpired = credentials.expires_at < new Date();
}
return isExpired;
let isExpired = true;
if (credentials?.expires_at && credentials?.access_token) {
isExpired = credentials.expires_at < new Date();
}
return isExpired;
}

@@ -163,77 +188,97 @@

export class LocalCredentials {
private _tokenSectionName: string;
private _tokenSectionName: string;
private _storage: SimpleStorage;
private _storage: SimpleStorage;
private _credentials: Credentials | null = null;
private _credentials: Credentials | null = null;
private _singlePromise: SinglePromise = new SinglePromise();
private _singlePromise: SinglePromise = new SinglePromise();
/**
* constructor
* @param {LocalCredentialsOptions} options
*/
constructor(options: LocalCredentialsOptions) {
this._tokenSectionName = options.tokenSectionName;
this._storage = options.storage;
/**
* constructor
* @param {LocalCredentialsOptions} options
*/
constructor(options: LocalCredentialsOptions) {
this._tokenSectionName = options.tokenSectionName;
this._storage = options.storage;
}
/**
* setCredentials Provides an alternative fetch api request implementation with auth credentials
* @param {Credentials} credentials
*/
public async setCredentials(credentials?: Credentials): Promise<void> {
if (credentials?.expires_in) {
credentials.expires_at = new Date(
Date.now() + (credentials.expires_in - 30) * 1000,
);
if (this._storage) {
const tokenStr: string = JSON.stringify(credentials);
await this._storage.setItem(this._tokenSectionName, tokenStr);
}
this._credentials = credentials;
} else {
if (this._storage) {
await this._storage.removeItem(this._tokenSectionName);
}
this._credentials = null;
}
}
/**
* setCredentials Provides an alternative fetch api request implementation with auth credentials
* @param {Credentials} credentials
*/
public async setCredentials(credentials?: Credentials): Promise<void> {
if (credentials && credentials.expires_in) {
credentials.expires_at = new Date(
Date.now() + (credentials.expires_in - 30) * 1000,
);
if (this._storage) {
const tokenStr: string = JSON.stringify(credentials);
await this._storage.setItem(this._tokenSectionName, tokenStr);
}
this._credentials = credentials;
} else {
if (this._storage) {
await this._storage.removeItem(this._tokenSectionName);
}
this._credentials = null;
/**
* Get credentials.
* @return {Promise<Credentials | null>}
*/
public async getCredentials(): Promise<Credentials | null> {
return this._singlePromise.run('getCredentials', async () => {
if (isCredentialsExpired(this._credentials)) {
this._credentials = await this._getStorageCredentials();
}
return this._credentials;
});
}
/**
* Get storage credentials.
*/
private async _getStorageCredentials(): Promise<Credentials | null> {
return this._singlePromise.run('_getStorageCredentials', async () => {
let credentials: Credentials = null;
const tokenStr: string = await this._storage.getItem(
this._tokenSectionName,
);
if (tokenStr !== undefined && tokenStr !== null) {
try {
credentials = JSON.parse(tokenStr);
if (credentials?.expires_at) {
credentials.expires_at = new Date(credentials.expires_at);
}
} catch (error) {
await this._storage.removeItem(this._tokenSectionName);
credentials = null;
}
}
}
return credentials;
});
}
/**
* Get credentials.
* @return {Promise<Credentials | null>}
*/
public async getCredentials(): Promise<Credentials | null> {
return this._singlePromise.run('getCredentials', async () => {
if (isCredentialsExpired(this._credentials)) {
this._credentials = await this._getStorageCredentials();
}
return this._credentials;
});
public _getStorageCredentialsSync(): Credentials | null {
let credentials: Credentials = null;
const tokenStr: string = this._storage.getItemSync(
this._tokenSectionName,
);
if (tokenStr !== undefined && tokenStr !== null) {
try {
credentials = JSON.parse(tokenStr);
if (credentials?.expires_at) {
credentials.expires_at = new Date(credentials.expires_at);
}
} catch (error) {
this._storage.removeItem(this._tokenSectionName);
credentials = null;
}
}
return credentials
}
/**
* Get storage credentials.
*/
private async _getStorageCredentials(): Promise<Credentials | null> {
return this._singlePromise.run('_getStorageCredentials', async () => {
let credentials: Credentials = null;
const tokenStr: string = await this._storage.getItem(
this._tokenSectionName,
);
if (tokenStr !== undefined && tokenStr !== null) {
try {
credentials = JSON.parse(tokenStr);
if (credentials && credentials.expires_at) {
credentials.expires_at = new Date(credentials.expires_at);
}
} catch (error) {
await this._storage.removeItem(this._tokenSectionName);
credentials = null;
}
}
return credentials;
});
}
}

@@ -245,315 +290,325 @@

export class OAuth2Client implements AuthClient {
private static _defaultRetry = 2;
private static _minRetry = 0;
private static _maxRetry = 5;
private static _retryInterval = 1000;
private static _defaultRetry = 2;
private static _minRetry = 0;
private static _maxRetry = 5;
private static _retryInterval = 1000;
private _apiOrigin: string;
private _clientId: string;
private _retry: number;
private _clientSecret?: string;
private _baseRequest: <T>(
url: string,
options?: RequestOptions,
) => Promise<T>;
private _localCredentials: LocalCredentials;
private _storage: SimpleStorage;
private _deviceID?: string;
private _tokenInURL?: boolean;
private _refreshTokenFunc: (refreshToken?: string) => Promise<Credentials>;
private _headers?: { [key: string]: string };
private _singlePromise: SinglePromise = new SinglePromise();
private _apiOrigin: string;
private _clientId: string;
private _retry: number;
private _clientSecret?: string;
private _baseRequest: <T>(
url: string,
options?: RequestOptions,
) => Promise<T>;
private _localCredentials: LocalCredentials;
private _storage: SimpleStorage;
private _deviceID?: string;
private _tokenInURL?: boolean;
private _refreshTokenFunc: (refreshToken?: string) => Promise<Credentials>;
private _headers?: { [key: string]: string };
private _singlePromise: SinglePromise = new SinglePromise();
/**
* constructor
* @param {OAuth2ClientOptions} options
*/
constructor(options: OAuth2ClientOptions) {
this._apiOrigin = options.apiOrigin;
this._clientId = options.clientId;
this._retry = this._formatRetry(options.retry, OAuth2Client._defaultRetry);
if (options.baseRequest != undefined) {
this._baseRequest = options.baseRequest;
} else {
this._baseRequest = defaultRequest;
}
this._tokenInURL = options.tokenInURL;
this._headers = options.headers;
// @ts-ignore
this._storage = options.storage || defaultStorage;
this._localCredentials = new LocalCredentials({
tokenSectionName: 'credentials_' + options.clientId,
storage: this._storage,
});
this._clientSecret = options.clientSecret;
this._refreshTokenFunc =
options.refreshTokenFunc || this._defaultRefreshTokenFunc;
/**
* constructor
* @param {OAuth2ClientOptions} options
*/
constructor(options: OAuth2ClientOptions) {
this._apiOrigin = options.apiOrigin;
this._clientId = options.clientId;
this._retry = this._formatRetry(options.retry, OAuth2Client._defaultRetry);
if (options.baseRequest != undefined) {
this._baseRequest = options.baseRequest;
} else {
this._baseRequest = defaultRequest;
}
this._tokenInURL = options.tokenInURL;
this._headers = options.headers;
// @ts-ignore
this._storage = options.storage || defaultStorage;
this._localCredentials = new LocalCredentials({
tokenSectionName: 'credentials_' + options.clientId,
storage: this._storage,
});
this._clientSecret = options.clientSecret;
this._refreshTokenFunc =
options.refreshTokenFunc || this._defaultRefreshTokenFunc;
}
/**
* setCredentials Provides an alternative fetch api request implementation with auth credentials
* @param {Credentials} credentials
* @return {Promise<void>}
*/
public setCredentials(credentials?: Credentials): Promise<void> {
return this._localCredentials.setCredentials(credentials);
/**
* setCredentials Provides an alternative fetch api request implementation with auth credentials
* @param {Credentials} credentials
* @return {Promise<void>}
*/
public setCredentials(credentials?: Credentials): Promise<void> {
return this._localCredentials.setCredentials(credentials);
}
/**
* getAccessToken return a validate access token
*/
public async getAccessToken(): Promise<string> {
const credentials: Credentials = await this._getCredentials();
if (credentials?.access_token) {
return Promise.resolve(credentials.access_token);
}
return Promise.reject({ error: ErrorType.UNAUTHENTICATED } as ResponseError);
}
/**
* getAccessToken return a validate access token
*/
public async getAccessToken(): Promise<string> {
const credentials: Credentials = await this._getCredentials();
if (credentials && credentials.access_token) {
return Promise.resolve(credentials.access_token);
}
return Promise.reject({error: ErrorType.UNAUTHENTICATED} as ResponseError);
/**
* request http like simple fetch api, exp:request('/v1/user/me', {withCredentials:true})
* @param {string} url
* @param {AuthClientRequestOptions} options
*/
public async request<T>(
url: string,
options?: AuthClientRequestOptions,
): Promise<T> {
if (!options) {
options = {};
}
/**
* request http like simple fetch api, exp:request('/v1/user/me', {withCredentials:true})
* @param {string} url
* @param {AuthClientRequestOptions} options
*/
public async request<T>(
url: string,
options?: AuthClientRequestOptions,
): Promise<T> {
if (!options) {
options = {};
}
const retry: number = this._formatRetry(options.retry, this._retry);
options.headers = options.headers || {};
if (this._headers) {
options.headers = {
...this._headers,
...options.headers,
};
}
if (!options.headers[RequestIdHeaderName]) {
options.headers[RequestIdHeaderName] = generateRequestId();
}
if (!options.headers[DeviceIdHeaderName]) {
const deviceId = await this._getDeviceId();
options.headers[DeviceIdHeaderName] = deviceId;
}
if (options && options.withCredentials) {
const credentials = await this._getCredentials();
if (credentials) {
if (this._tokenInURL) {
if (url.indexOf('?') < 0) {
url += '?';
}
url += 'access_token=' + credentials.access_token;
} else {
options.headers['Authorization'] =
credentials.token_type + ' ' + credentials.access_token;
}
}
const retry: number = this._formatRetry(options.retry, this._retry);
options.headers = options.headers || {};
if (this._headers) {
options.headers = {
...this._headers,
...options.headers,
};
}
if (!options.headers[RequestIdHeaderName]) {
options.headers[RequestIdHeaderName] = generateRequestId();
}
if (!options.headers[DeviceIdHeaderName]) {
const deviceId = await this._getDeviceId();
options.headers[DeviceIdHeaderName] = deviceId;
}
if (options?.withCredentials) {
const credentials = await this._getCredentials();
if (credentials) {
if (this._tokenInURL) {
if (url.indexOf('?') < 0) {
url += '?';
}
url += 'access_token=' + credentials.access_token;
} else {
if (this._clientId && url.indexOf('client_id') < 0) {
url += url.indexOf('?') < 0 ? '?' : '&';
url += 'client_id=' + this._clientId;
}
options.headers['Authorization'] =
credentials.token_type + ' ' + credentials.access_token;
}
if (url.startsWith('/')) {
url = this._apiOrigin + url;
}
let response: T | null = null;
const maxRequestTimes: number = retry + 1;
for (
let requestTime = 0;
requestTime < maxRequestTimes;
requestTime++
) {
try {
response = await this._baseRequest<T>(url, options);
break;
} catch (responseError) {
if (
requestTime === retry ||
!responseError ||
responseError.error !== 'unreachable'
) {
return Promise.reject(responseError);
}
}
await this._sleep(OAuth2Client._retryInterval);
}
return response;
}
} else {
if (this._clientId && url.indexOf('client_id') < 0) {
url += url.indexOf('?') < 0 ? '?' : '&';
url += 'client_id=' + this._clientId;
}
}
/**
* Check retry value.
* @param {number} retry
* @return {number}
*/
private _checkRetry(retry: number): number {
let responseError: ResponseError | null = null;
if (url.startsWith('/')) {
url = this._apiOrigin + url;
}
let response: T | null = null;
const maxRequestTimes: number = retry + 1;
for (
let requestTime = 0;
requestTime < maxRequestTimes;
requestTime++
) {
try {
response = await this._baseRequest<T>(url, options);
break;
} catch (responseError) {
if (
typeof retry !== 'number' ||
retry < OAuth2Client._minRetry ||
retry > OAuth2Client._maxRetry
requestTime === retry ||
!responseError ||
responseError.error !== 'unreachable'
) {
responseError = {
error: ErrorType.UNREACHABLE,
error_description: 'wrong options param: retry',
};
return Promise.reject(responseError);
}
if (responseError) {
throw responseError;
}
return retry;
}
await this._sleep(OAuth2Client._retryInterval);
}
return response;
}
/**
* Format retry value.
* @param {number} retry
* @param {number} defaultVale
* @return {number}
*/
private _formatRetry(retry: number, defaultVale: number): number {
if (typeof retry === 'undefined') {
return defaultVale;
} else {
return this._checkRetry(retry);
}
/**
* Check retry value.
* @param {number} retry
* @return {number}
*/
private _checkRetry(retry: number): number {
let responseError: ResponseError | null = null;
if (
typeof retry !== 'number' ||
retry < OAuth2Client._minRetry ||
retry > OAuth2Client._maxRetry
) {
responseError = {
error: ErrorType.UNREACHABLE,
error_description: 'wrong options param: retry',
};
}
/**
* Sleep.
* @param {number} ms
* @return {Promise<void>}
*/
private async _sleep(ms: number): Promise<void> {
return new Promise<void>((resolve) => {
setTimeout(() => {
resolve();
}, ms);
});
if (responseError) {
throw responseError;
}
return retry;
}
/**
* Refresh expired token.
* @param {Credentials} credentials
* @return {Promise<Credentials>}
*/
private async _refreshToken(credentials: Credentials): Promise<Credentials> {
return this._singlePromise.run('_refreshToken', async () => {
if (!credentials || !credentials.refresh_token) {
return this._unAuthenticatedError('no refresh token found in credentials');
}
try {
const newCredentials: Credentials = await this._refreshTokenFunc(
credentials.refresh_token,
);
await this._localCredentials.setCredentials(newCredentials);
return newCredentials
} catch (error) {
if (error.error === ErrorType.INVALID_GRANT) {
await this._localCredentials.setCredentials(null);
return this._unAuthenticatedError(error.error_description);
}
return Promise.reject(error);
}
});
/**
* Format retry value.
* @param {number} retry
* @param {number} defaultVale
* @return {number}
*/
private _formatRetry(retry: number, defaultVale: number): number {
if (typeof retry === 'undefined') {
return defaultVale;
} else {
return this._checkRetry(retry);
}
}
/**
* anonymous signIn
* @param {Credentials} credentials
* @return {Promise<Credentials>}
*/
private async _anonymousSignIn(credentials: Credentials): Promise<Credentials> {
return this._singlePromise.run('_anonymous', async () => {
if (!credentials || credentials.scope !== 'anonymous') {
return this._unAuthenticatedError('no anonymous in credentials');
}
try {
const newCredentials: Credentials = await this.request('/auth/v1/signin/anonymously', {
method: 'POST',
body: {
client_id: this._clientId,
client_secret: this._clientSecret,
},
});
await this._localCredentials.setCredentials(newCredentials);
return newCredentials
} catch (error) {
if (error.error === ErrorType.INVALID_GRANT) {
await this._localCredentials.setCredentials(null);
return this._unAuthenticatedError(error.error_description);
}
return Promise.reject(error);
}
});
}
/**
* Sleep.
* @param {number} ms
* @return {Promise<void>}
*/
private async _sleep(ms: number): Promise<void> {
return new Promise<void>((resolve) => {
setTimeout(() => {
resolve();
}, ms);
});
}
/**
* Default refresh token function.
* @param {string} refreshToken
* @return {Promise<Credentials>}
*/
private _defaultRefreshTokenFunc(
refreshToken?: string,
): Promise<Credentials> {
if (refreshToken === undefined || refreshToken === '') {
return this._unAuthenticatedError('refresh token not found');
/**
* Refresh expired token.
* @param {Credentials} credentials
* @return {Promise<Credentials>}
*/
private async _refreshToken(credentials: Credentials): Promise<Credentials> {
return this._singlePromise.run('_refreshToken', async () => {
if (!credentials || !credentials.refresh_token) {
return this._unAuthenticatedError('no refresh token found in credentials');
}
try {
const newCredentials: Credentials = await this._refreshTokenFunc(
credentials.refresh_token,
);
await this._localCredentials.setCredentials(newCredentials);
return newCredentials
} catch (error) {
if (error.error === ErrorType.INVALID_GRANT) {
await this._localCredentials.setCredentials(null);
return this._unAuthenticatedError(error.error_description);
}
return this.request('/auth/v1/token', {
method: 'POST',
body: {
client_id: this._clientId,
client_secret: this._clientSecret,
grant_type: 'refresh_token',
refresh_token: refreshToken,
},
return Promise.reject(error);
}
});
}
/**
* anonymous signIn
* @param {Credentials} credentials
* @return {Promise<Credentials>}
*/
private async _anonymousSignIn(credentials: Credentials): Promise<Credentials> {
return this._singlePromise.run('_anonymous', async () => {
if (!credentials || credentials.scope !== 'anonymous') {
return this._unAuthenticatedError('no anonymous in credentials');
}
try {
const newCredentials: Credentials = await this.request('/auth/v1/signin/anonymously', {
method: 'POST',
body: {
client_id: this._clientId,
client_secret: this._clientSecret,
},
});
await this._localCredentials.setCredentials(newCredentials);
return newCredentials
} catch (error) {
if (error.error === ErrorType.INVALID_GRANT) {
await this._localCredentials.setCredentials(null);
return this._unAuthenticatedError(error.error_description);
}
return Promise.reject(error);
}
});
}
/**
* Default refresh token function.
* @param {string} refreshToken
* @return {Promise<Credentials>}
*/
private _defaultRefreshTokenFunc(
refreshToken?: string,
): Promise<Credentials> {
if (refreshToken === undefined || refreshToken === '') {
return this._unAuthenticatedError('refresh token not found');
}
return this.request('/auth/v1/token', {
method: 'POST',
body: {
client_id: this._clientId,
client_secret: this._clientSecret,
grant_type: 'refresh_token',
refresh_token: refreshToken,
},
});
}
/**
* Get credentials.
*/
private async _getCredentials(): Promise<Credentials | null> {
let credentials: Credentials = await this._localCredentials.getCredentials();
if (isCredentialsExpired(credentials)) {
if (credentials && credentials.scope === 'anonymous') {
credentials = await this. _anonymousSignIn(credentials)
} else {
credentials = await this._refreshToken(credentials);
}
}
return credentials;
/**
* Get credentials.
*/
public async _getCredentials(): Promise<Credentials | null> {
let credentials: Credentials = await this._localCredentials.getCredentials();
if (isCredentialsExpired(credentials)) {
if (credentials && credentials.scope === 'anonymous') {
credentials = await this._anonymousSignIn(credentials)
} else {
credentials = await this._refreshToken(credentials);
}
}
return credentials;
}
/**
* Get deviceId
*/
private async _getDeviceId(): Promise<string> {
if (this._deviceID) {
return this._deviceID;
}
let deviceId: string = await this._storage.getItem(
DeviceIdSectionName,
);
if (!(typeof deviceId === 'string' &&
deviceId.length >= 16 &&
deviceId.length <= 48)) {
deviceId = uuidv4();
await this._storage.setItem(DeviceIdSectionName, deviceId);
}
this._deviceID = deviceId;
return deviceId;
public getCredentialsSync(): Credentials | null {
const credentials: Credentials = this._localCredentials._getStorageCredentialsSync();
return credentials
}
public getCredentialsAsync(): Promise<Credentials | null> {
return this._localCredentials.getCredentials()
}
/**
* Get deviceId
*/
private async _getDeviceId(): Promise<string> {
if (this._deviceID) {
return this._deviceID;
}
/**
* Generate unAuthenticated error.
* @param {string} err
* @return {Promise<T>}
*/
private _unAuthenticatedError<T>(err?: string): Promise<T> {
return Promise.reject({
error: ErrorType.UNAUTHENTICATED,
error_description: err,
} as ResponseError);
let deviceId: string = await this._storage.getItem(
DeviceIdSectionName,
);
if (!(typeof deviceId === 'string' &&
deviceId.length >= 16 &&
deviceId.length <= 48)) {
deviceId = uuidv4();
await this._storage.setItem(DeviceIdSectionName, deviceId);
}
this._deviceID = deviceId;
return deviceId;
}
/**
* Generate unAuthenticated error.
* @param {string} err
* @return {Promise<T>}
*/
private _unAuthenticatedError<T>(err?: string): Promise<T> {
return Promise.reject({
error: ErrorType.UNAUTHENTICATED,
error_description: err,
} as ResponseError);
}
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc