@accounts/client
Advanced tools
Comparing version 0.19.0 to 0.19.1-alpha.17
@@ -1,2 +0,2 @@ | ||
import { LoginResult, Tokens, ImpersonationResult, User } from '@accounts/types'; | ||
import { LoginResult, MFALoginResult, Tokens, ImpersonationResult, User } from '@accounts/types'; | ||
import { TransportInterface } from './transport-interface'; | ||
@@ -22,2 +22,8 @@ import { AccountsClientOptions } from './types'; | ||
/** | ||
* Authenticate the user with a specific service (not creating a session) | ||
*/ | ||
authenticateWithService(service: string, credentials: { | ||
[key: string]: any; | ||
}): Promise<boolean>; | ||
/** | ||
* Login the user with a specific service | ||
@@ -27,8 +33,12 @@ */ | ||
[key: string]: any; | ||
}): Promise<LoginResult>; | ||
}): Promise<LoginResult | Omit<MFALoginResult, 'mfaToken'>>; | ||
/** | ||
* Performs the mfa needed challenge and logs in afterwards | ||
*/ | ||
performMfaChallenge(challenge: string, params: any): Promise<LoginResult>; | ||
/** | ||
* Refresh the user session | ||
* If the tokens have expired try to refresh them | ||
*/ | ||
refreshSession(): Promise<Tokens | null>; | ||
refreshSession(force?: boolean): Promise<Tokens | null>; | ||
/** | ||
@@ -35,0 +45,0 @@ * Impersonate to another user. |
@@ -10,2 +10,3 @@ "use strict"; | ||
TokenKey["RefreshToken"] = "refreshToken"; | ||
TokenKey["MfaToken"] = "mfaToken"; | ||
TokenKey["OriginalAccessToken"] = "originalAccessToken"; | ||
@@ -99,2 +100,12 @@ TokenKey["OriginalRefreshToken"] = "originalRefreshToken"; | ||
/** | ||
* Authenticate the user with a specific service (not creating a session) | ||
*/ | ||
AccountsClient.prototype.authenticateWithService = function (service, credentials) { | ||
return tslib_1.__awaiter(this, void 0, void 0, function () { | ||
return tslib_1.__generator(this, function (_a) { | ||
return [2 /*return*/, this.transport.authenticateWithService(service, credentials)]; | ||
}); | ||
}); | ||
}; | ||
/** | ||
* Login the user with a specific service | ||
@@ -110,6 +121,12 @@ */ | ||
response = _a.sent(); | ||
if (!response.tokens) return [3 /*break*/, 3]; | ||
return [4 /*yield*/, this.setTokens(response.tokens)]; | ||
case 2: | ||
_a.sent(); | ||
return [2 /*return*/, response]; | ||
return [3 /*break*/, 5]; | ||
case 3: return [4 /*yield*/, this.storage.setItem(this.getTokenKey(TokenKey.MfaToken), response.mfaToken)]; | ||
case 4: | ||
_a.sent(); | ||
_a.label = 5; | ||
case 5: return [2 /*return*/, response]; | ||
} | ||
@@ -120,6 +137,35 @@ }); | ||
/** | ||
* Performs the mfa needed challenge and logs in afterwards | ||
*/ | ||
AccountsClient.prototype.performMfaChallenge = function (challenge, params) { | ||
return tslib_1.__awaiter(this, void 0, void 0, function () { | ||
var mfaToken, loginToken, result; | ||
return tslib_1.__generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: return [4 /*yield*/, this.storage.getItem(this.getTokenKey(TokenKey.MfaToken))]; | ||
case 1: | ||
mfaToken = _a.sent(); | ||
if (!mfaToken) { | ||
throw new Error('mfaToken is not available in storage'); | ||
} | ||
return [4 /*yield*/, this.transport.performMfaChallenge(challenge, mfaToken, params)]; | ||
case 2: | ||
loginToken = _a.sent(); | ||
return [4 /*yield*/, this.loginWithService('mfa', { mfaToken: mfaToken, loginToken: loginToken })]; | ||
case 3: | ||
result = _a.sent(); | ||
return [4 /*yield*/, this.storage.removeItem(this.getTokenKey(TokenKey.MfaToken))]; | ||
case 4: | ||
_a.sent(); | ||
return [2 /*return*/, result]; | ||
} | ||
}); | ||
}); | ||
}; | ||
/** | ||
* Refresh the user session | ||
* If the tokens have expired try to refresh them | ||
*/ | ||
AccountsClient.prototype.refreshSession = function () { | ||
AccountsClient.prototype.refreshSession = function (force) { | ||
if (force === void 0) { force = false; } | ||
return tslib_1.__awaiter(this, void 0, void 0, function () { | ||
@@ -138,3 +184,3 @@ var tokens, isAccessTokenExpired, isRefreshTokenExpired, refreshedSession, err_1; | ||
isRefreshTokenExpired = utils_1.isTokenExpired(tokens.refreshToken); | ||
if (!(isAccessTokenExpired && !isRefreshTokenExpired)) return [3 /*break*/, 5]; | ||
if (!((force || isAccessTokenExpired) && !isRefreshTokenExpired)) return [3 /*break*/, 5]; | ||
return [4 /*yield*/, this.transport.refreshTokens(tokens.accessToken, tokens.refreshToken)]; | ||
@@ -141,0 +187,0 @@ case 3: |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
var tslib_1 = require("tslib"); | ||
exports.tokenStorageLocal = { | ||
setItem: function (key, value) { | ||
return tslib_1.__awaiter(this, void 0, void 0, function () { | ||
return tslib_1.__generator(this, function (_a) { | ||
return [2 /*return*/, localStorage.setItem(key, value)]; | ||
}); | ||
}); | ||
return localStorage.setItem(key, value); | ||
}, | ||
getItem: function (key) { | ||
return tslib_1.__awaiter(this, void 0, void 0, function () { | ||
return tslib_1.__generator(this, function (_a) { | ||
return [2 /*return*/, localStorage.getItem(key)]; | ||
}); | ||
}); | ||
return localStorage.getItem(key); | ||
}, | ||
removeItem: function (key) { | ||
return tslib_1.__awaiter(this, void 0, void 0, function () { | ||
return tslib_1.__generator(this, function (_a) { | ||
return [2 /*return*/, localStorage.removeItem(key)]; | ||
}); | ||
}); | ||
return localStorage.removeItem(key); | ||
}, | ||
}; | ||
//# sourceMappingURL=token-storage-local.js.map |
@@ -1,2 +0,2 @@ | ||
import { LoginResult, ImpersonationResult, CreateUser, User } from '@accounts/types'; | ||
import { LoginResult, MFALoginResult, ImpersonationResult, CreateUser, User } from '@accounts/types'; | ||
import { AccountsClient } from './accounts-client'; | ||
@@ -6,5 +6,9 @@ export interface TransportInterface { | ||
createUser(user: CreateUser): Promise<string>; | ||
authenticateWithService(service: string, authenticateParams: { | ||
[key: string]: string | object; | ||
}): Promise<boolean>; | ||
loginWithService(service: string, authenticateParams: { | ||
[key: string]: string | object; | ||
}): Promise<LoginResult>; | ||
}): Promise<LoginResult | MFALoginResult>; | ||
performMfaChallenge(challenge: string, mfaToken: string, params: any): Promise<string>; | ||
logout(): Promise<void>; | ||
@@ -11,0 +15,0 @@ getUser(): Promise<User>; |
@@ -0,5 +1,7 @@ | ||
declare type ValueOrPromise<T> = T | Promise<T>; | ||
export interface TokenStorage { | ||
setItem(key: string, value: string): Promise<void>; | ||
getItem(key: string): Promise<string | null>; | ||
removeItem(key: string): Promise<void>; | ||
setItem(key: string, value: string): ValueOrPromise<void>; | ||
getItem(key: string): ValueOrPromise<string | null>; | ||
removeItem(key: string): ValueOrPromise<void>; | ||
} | ||
export {}; |
{ | ||
"name": "@accounts/client", | ||
"version": "0.19.0", | ||
"version": "0.19.1-alpha.17+1d0a3901", | ||
"description": "Fullstack authentication and accounts-management", | ||
@@ -48,3 +48,3 @@ "main": "lib/index.js", | ||
"@types/jwt-decode": "2.2.1", | ||
"@types/node": "12.7.2", | ||
"@types/node": "12.7.4", | ||
"jest": "24.9.0", | ||
@@ -61,3 +61,3 @@ "jest-localstorage-mock": "2.4.0", | ||
}, | ||
"gitHead": "c0a7905161c702350efd4f7a622c55ede495a42b" | ||
"gitHead": "1d0a3901760c599054c0ccdd3bcb0443e854646a" | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Manifest confusion
Supply chain riskThis package has inconsistent metadata. This could be malicious or caused by an error when publishing the package.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
29020
455
1