@sweepbright/api-client 0.31.8-pre-release.1 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common/sleep.d.ts +1 -0
- package/dist/common/sleep.js +8 -0
- package/dist/common/sleep.js.map +1 -0
- package/dist/oauth-manager/AuthenticationService_PrivateAPI.js.map +1 -1
- package/dist/oauth-manager/SessionDataImpl.js +2 -2
- package/dist/oauth-manager/SessionDataImpl.js.map +1 -1
- package/dist/oauth-manager/{OAuthManager_Impl.d.ts → SweepbrightOAuthManager.d.ts} +4 -2
- package/dist/oauth-manager/SweepbrightOAuthManager.js +104 -0
- package/dist/oauth-manager/SweepbrightOAuthManager.js.map +1 -0
- package/dist/oauth-manager/TokensRepository_Memory.js.map +1 -1
- package/dist/oauth-manager/TokensRepository_Redis.js +4 -5
- package/dist/oauth-manager/TokensRepository_Redis.js.map +1 -1
- package/dist/oauth-manager/TokensRepository_RedisWithMemoryFallback.js.map +1 -1
- package/dist/oauth-manager/factories/createOAuthManager.js +11 -7
- package/dist/oauth-manager/factories/createOAuthManager.js.map +1 -1
- package/package.json +1 -1
- package/dist/oauth-manager/OAuthManager_Impl.js +0 -98
- package/dist/oauth-manager/OAuthManager_Impl.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function sleep(ms: number): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sleep.js","sourceRoot":"","sources":["../../src/common/sleep.ts"],"names":[],"mappings":";;;AAAO,KAAK,UAAU,KAAK,CAAC,EAAU;IACpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAFD,sBAEC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthenticationService_PrivateAPI.js","sourceRoot":"","sources":["../../src/oauth-manager/AuthenticationService_PrivateAPI.ts"],"names":[],"mappings":";;;;;;AAAA,mCAAyC;AACzC,kDAA6C;AAQ7C;;;;;;;;GAQG;AACH,MAAa,gCAAgC;IAG3C,YAAY,OAA+C;QACzD,IAAI,CAAC,UAAU,GAAG,eAAK,CAAC,MAAM,CAAC;YAC7B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE;gBACP,MAAM,EAAE,+BAA+B,OAAO,CAAC,UAAU,OAAO;aACjE;SACF,CAAC,CAAC;IACL,CAAC;
|
|
1
|
+
{"version":3,"file":"AuthenticationService_PrivateAPI.js","sourceRoot":"","sources":["../../src/oauth-manager/AuthenticationService_PrivateAPI.ts"],"names":[],"mappings":";;;;;;AAAA,mCAAyC;AACzC,kDAA6C;AAQ7C;;;;;;;;GAQG;AACH,MAAa,gCAAgC;IAG3C,YAAY,OAA+C;QACzD,IAAI,CAAC,UAAU,GAAG,eAAK,CAAC,MAAM,CAAC;YAC7B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE;gBACP,MAAM,EAAE,+BAA+B,OAAO,CAAC,UAAU,OAAO;aACjE;SACF,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,WAAwB;QAChD,MAAM,OAAO,GAAG;YACd,SAAS,EAAE,WAAW,CAAC,cAAc,EAAE,CAAC,QAAQ;YAChD,aAAa,EAAE,WAAW,CAAC,cAAc,EAAE,CAAC,YAAY;YACxD,KAAK,EAAE,WAAW,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;YACxC,UAAU,EAAE,oBAAoB;SACjC,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,EAAE,OAAO,EAAE;YACzE,cAAc,CAAC,MAAM;gBACnB,OAAO,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,CAAC;YAC1C,CAAC;SACF,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;YAC3B,OAAO,IAAI,CAAC;SACb;QACD,MAAM,EACJ,IAAI,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,GAC/C,GAAG,QAAQ,CAAC;QACb,IAAA,WAAE,EAAC,YAAY,EAAE,gCAAgC,CAAC,CAAC;QACnD,IAAA,WAAE,EAAC,UAAU,EAAE,8BAA8B,CAAC,CAAC;QAC/C,IAAA,oBAAW,EAAC,UAAU,EAAE,QAAQ,EAAE,6BAA6B,CAAC,CAAC;QAEjE,MAAM,MAAM,GAAW;YACrB,WAAW,EAAE,YAAY;YACzB,SAAS,EAAE,UAAU;SACtB,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AA1CD,4EA0CC"}
|
|
@@ -29,8 +29,8 @@ class SessionDataImpl {
|
|
|
29
29
|
return Array.from(new Set(normalizedScopes));
|
|
30
30
|
}
|
|
31
31
|
createKey(options) {
|
|
32
|
-
const clientId = options
|
|
33
|
-
const normalizedScopes = this.normalizeScopes(
|
|
32
|
+
const { clientId, scopes } = options;
|
|
33
|
+
const normalizedScopes = this.normalizeScopes(scopes);
|
|
34
34
|
const secretHash = shortHash(this.credentials.clientSecret);
|
|
35
35
|
const scopesString = normalizedScopes.join(',');
|
|
36
36
|
// Session key uniquely identifies a session.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionDataImpl.js","sourceRoot":"","sources":["../../src/oauth-manager/SessionDataImpl.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AASpC,SAAS,SAAS,CAAC,CAAS;IAC1B,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,MAAa,eAAe;IAK1B,YAAY,OAA+B;QACzC,IAAI,CAAC,WAAW,GAAG;YACjB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,CAAC;QAEF,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAE7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;
|
|
1
|
+
{"version":3,"file":"SessionDataImpl.js","sourceRoot":"","sources":["../../src/oauth-manager/SessionDataImpl.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AASpC,SAAS,SAAS,CAAC,CAAS;IAC1B,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,MAAa,eAAe;IAK1B,YAAY,OAA+B;QACzC,IAAI,CAAC,WAAW,GAAG;YACjB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,CAAC;QAEF,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAE7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAEM,cAAc;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IACM,aAAa;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACM,SAAS;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAEO,eAAe,CAAC,MAAyB;QAC/C,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACpE,gBAAgB,CAAC,IAAI,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC/C,CAAC;IAEO,SAAS,CAAC,OAA+B;QAC/C,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAErC,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAEtD,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAE5D,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEhD,6CAA6C;QAC7C,2EAA2E;QAC3E,wDAAwD;QACxD,mEAAmE;QACnE,EAAE;QACF,kFAAkF;QAClF,iCAAiC;QACjC,OAAO,GAAG,QAAQ,IAAI,UAAU,IAAI,YAAY,EAAE,CAAC;IACrD,CAAC;CACF;AAlDD,0CAkDC"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { AuthenticationService, GetAccessTokenOptions, Logger, OAuthManager, SessionData, TokensRepository } from './interfaces';
|
|
2
|
-
export declare class
|
|
2
|
+
export declare class SweepbrightOAuthManager implements OAuthManager {
|
|
3
3
|
private readonly tokensRepository;
|
|
4
4
|
private readonly authenticationService;
|
|
5
5
|
private readonly log;
|
|
6
6
|
constructor(tokensRepository: TokensRepository, authenticationService: AuthenticationService, log: Logger);
|
|
7
7
|
private getLockTimeFromCurrentTime;
|
|
8
|
-
private sleep;
|
|
9
8
|
private expiresInToExpiresAt;
|
|
9
|
+
private cleanUpLock;
|
|
10
|
+
private getAccessTokenAndReleaseLock;
|
|
11
|
+
private pollForAccessToken;
|
|
10
12
|
getAccessTokenBySessionData(sessionData: SessionData, options?: GetAccessTokenOptions): Promise<string | null>;
|
|
11
13
|
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SweepbrightOAuthManager = void 0;
|
|
4
|
+
/* eslint no-console: "error" */
|
|
5
|
+
const sleep_1 = require("../common/sleep");
|
|
6
|
+
const SECOND = 1000;
|
|
7
|
+
const LOCK_TTL = 10 * SECOND;
|
|
8
|
+
const MANAGER_POLLING_INTERVAL = 2 * SECOND;
|
|
9
|
+
const MANAGER_POLLING_TIMEOUT = 20 * SECOND;
|
|
10
|
+
class SweepbrightOAuthManager {
|
|
11
|
+
constructor(tokensRepository, authenticationService, log) {
|
|
12
|
+
this.tokensRepository = tokensRepository;
|
|
13
|
+
this.authenticationService = authenticationService;
|
|
14
|
+
this.log = log;
|
|
15
|
+
}
|
|
16
|
+
getLockTimeFromCurrentTime(currentTime) {
|
|
17
|
+
return new Date(currentTime.getTime() + LOCK_TTL);
|
|
18
|
+
}
|
|
19
|
+
expiresInToExpiresAt(expiresIn, issuedAt) {
|
|
20
|
+
return new Date(issuedAt.getTime() + expiresIn * SECOND);
|
|
21
|
+
}
|
|
22
|
+
cleanUpLock(lockId, sessionKey) {
|
|
23
|
+
return this.tokensRepository.releaseLock(lockId, {
|
|
24
|
+
shouldUpdateTokens: false,
|
|
25
|
+
sessionKey,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
async getAccessTokenAndReleaseLock(lockId, sessionData, forceInvalidate) {
|
|
29
|
+
const { log } = this;
|
|
30
|
+
let tokens = null;
|
|
31
|
+
const sessionKey = sessionData.getSessionKey();
|
|
32
|
+
try {
|
|
33
|
+
if (forceInvalidate) {
|
|
34
|
+
// Remove ASAP the token to be invalidated
|
|
35
|
+
await this.tokensRepository.deleteAccessToken(lockId, sessionKey);
|
|
36
|
+
}
|
|
37
|
+
log.debug('authentication');
|
|
38
|
+
tokens = await this.authenticationService.authenticate(sessionData);
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
log.debug('authentication failed, error', e);
|
|
42
|
+
await this.cleanUpLock(lockId, sessionKey);
|
|
43
|
+
throw new Error('Failed to authenticate');
|
|
44
|
+
}
|
|
45
|
+
const issuedAt = new Date();
|
|
46
|
+
if (!tokens) {
|
|
47
|
+
log.debug('authentication failed, wrong credentials');
|
|
48
|
+
await this.cleanUpLock(lockId, sessionKey);
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
log.debug('authentication succeeded');
|
|
52
|
+
await this.tokensRepository.releaseLock(lockId, {
|
|
53
|
+
shouldUpdateTokens: true,
|
|
54
|
+
sessionKey,
|
|
55
|
+
tokens,
|
|
56
|
+
expiresAt: this.expiresInToExpiresAt(tokens.expiresIn, issuedAt),
|
|
57
|
+
currentTime: issuedAt,
|
|
58
|
+
});
|
|
59
|
+
return tokens.accessToken;
|
|
60
|
+
}
|
|
61
|
+
async pollForAccessToken(sessionKey) {
|
|
62
|
+
const { log } = this;
|
|
63
|
+
const startedAt = new Date();
|
|
64
|
+
for (;;) {
|
|
65
|
+
const accessToken = await this.tokensRepository.getAccessTokenIfValid(sessionKey, new Date());
|
|
66
|
+
if (accessToken) {
|
|
67
|
+
log.debug('access token reused');
|
|
68
|
+
return accessToken;
|
|
69
|
+
}
|
|
70
|
+
if (new Date().getTime() >
|
|
71
|
+
startedAt.getTime() + MANAGER_POLLING_TIMEOUT) {
|
|
72
|
+
throw new Error('Timed out');
|
|
73
|
+
}
|
|
74
|
+
await (0, sleep_1.sleep)(MANAGER_POLLING_INTERVAL);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async getAccessTokenBySessionData(sessionData, options = {}) {
|
|
78
|
+
const { log } = this;
|
|
79
|
+
const { forceInvalidate } = options;
|
|
80
|
+
const sessionKey = sessionData.getSessionKey();
|
|
81
|
+
if (!forceInvalidate) {
|
|
82
|
+
const accessToken = await this.tokensRepository.getAccessTokenIfValid(sessionKey, new Date());
|
|
83
|
+
if (accessToken) {
|
|
84
|
+
log.debug('access token reused');
|
|
85
|
+
return accessToken;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const lockAcquiredAt = new Date();
|
|
89
|
+
const lockId = await this.tokensRepository.acquireLock({
|
|
90
|
+
currentTime: lockAcquiredAt,
|
|
91
|
+
sessionKey,
|
|
92
|
+
lockedUntil: this.getLockTimeFromCurrentTime(lockAcquiredAt),
|
|
93
|
+
});
|
|
94
|
+
if (lockId) {
|
|
95
|
+
return this.getAccessTokenAndReleaseLock(lockId, sessionData, forceInvalidate);
|
|
96
|
+
}
|
|
97
|
+
// Locked by another process. We need to wait for the token
|
|
98
|
+
// to become available (using polling).
|
|
99
|
+
// Or fail on timeout.
|
|
100
|
+
return this.pollForAccessToken(sessionKey);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
exports.SweepbrightOAuthManager = SweepbrightOAuthManager;
|
|
104
|
+
//# sourceMappingURL=SweepbrightOAuthManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SweepbrightOAuthManager.js","sourceRoot":"","sources":["../../src/oauth-manager/SweepbrightOAuthManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokensRepository_Memory.js","sourceRoot":"","sources":["../../src/oauth-manager/TokensRepository_Memory.ts"],"names":[],"mappings":";;;AAAA,gCAAgC;AAChC,+BAA0B;AAgB1B,MAAM,aAAa,GAA8B,IAAI,GAAG,EAAE,CAAC;AAE3D,MAAa,uBAAuB;IAGlC,YAA6B,GAAW;QAAX,QAAG,GAAH,GAAG,CAAQ;QAFhC,YAAO,GAA8B,aAAa,CAAC;IAEhB,CAAC;
|
|
1
|
+
{"version":3,"file":"TokensRepository_Memory.js","sourceRoot":"","sources":["../../src/oauth-manager/TokensRepository_Memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TokensRepository_Redis = void 0;
|
|
4
4
|
const uuid_1 = require("uuid");
|
|
5
|
+
const REDIS_OPTION_IF_NOT_EXISTS = 'NX';
|
|
6
|
+
const REDIS_OPTION_TTL_IN_MILLISECONDS = 'PX';
|
|
5
7
|
class TokensRepository_Redis {
|
|
6
8
|
constructor(redis, log) {
|
|
7
9
|
this.redis = redis;
|
|
@@ -53,9 +55,7 @@ class TokensRepository_Redis {
|
|
|
53
55
|
async acquireLock(options) {
|
|
54
56
|
const { sessionKey, lockedUntil, currentTime } = options;
|
|
55
57
|
const lockId = (0, uuid_1.v4)();
|
|
56
|
-
const result = await this.redis.set(this.lockKey(sessionKey), lockId,
|
|
57
|
-
lockedUntil.getTime() - currentTime.getTime(), 'NX' // NX means "only set record if not exists"
|
|
58
|
-
);
|
|
58
|
+
const result = await this.redis.set(this.lockKey(sessionKey), lockId, REDIS_OPTION_TTL_IN_MILLISECONDS, lockedUntil.getTime() - currentTime.getTime(), REDIS_OPTION_IF_NOT_EXISTS);
|
|
59
59
|
//Lock acquired
|
|
60
60
|
if (result === 'OK') {
|
|
61
61
|
this.log.debug('lock acquired');
|
|
@@ -79,8 +79,7 @@ class TokensRepository_Redis {
|
|
|
79
79
|
try {
|
|
80
80
|
if (shouldUpdateTokens) {
|
|
81
81
|
const { tokens: { accessToken }, expiresAt, currentTime, } = options;
|
|
82
|
-
await this.redis.set(this.accessTokenKey(sessionKey), accessToken,
|
|
83
|
-
expiresAt.getTime() - currentTime.getTime());
|
|
82
|
+
await this.redis.set(this.accessTokenKey(sessionKey), accessToken, REDIS_OPTION_TTL_IN_MILLISECONDS, expiresAt.getTime() - currentTime.getTime());
|
|
84
83
|
}
|
|
85
84
|
}
|
|
86
85
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokensRepository_Redis.js","sourceRoot":"","sources":["../../src/oauth-manager/TokensRepository_Redis.ts"],"names":[],"mappings":";;;AAEA,+BAA0B;AAU1B,MAAa,sBAAsB;IAGjC,YAA6B,KAAY,EAAmB,GAAW;QAA1C,UAAK,GAAL,KAAK,CAAO;QAAmB,QAAG,GAAH,GAAG,CAAQ;QAE/D,sBAAiB,GAAG,KAAK,CAAC;QAC1B,cAAS,GAAG,KAAK,CAAC;QAkBT,YAAO,GAAG,IAAI,CAAC;IArB0C,CAAC;
|
|
1
|
+
{"version":3,"file":"TokensRepository_Redis.js","sourceRoot":"","sources":["../../src/oauth-manager/TokensRepository_Redis.ts"],"names":[],"mappings":";;;AAEA,+BAA0B;AAU1B,MAAM,0BAA0B,GAAG,IAAI,CAAC;AACxC,MAAM,gCAAgC,GAAG,IAAI,CAAC;AAE9C,MAAa,sBAAsB;IAGjC,YAA6B,KAAY,EAAmB,GAAW;QAA1C,UAAK,GAAL,KAAK,CAAO;QAAmB,QAAG,GAAH,GAAG,CAAQ;QAE/D,sBAAiB,GAAG,KAAK,CAAC;QAC1B,cAAS,GAAG,KAAK,CAAC;QAkBT,YAAO,GAAG,IAAI,CAAC;IArB0C,CAAC;IAIpE,KAAK,CAAC,WAAW;QACtB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC3B,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAC9C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;SAC/B;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACO,KAAK,CAAC,eAAe;QAC3B,IAAI;YACF,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3B,OAAO,IAAI,CAAC;SACb;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC;YAC5C,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAIO,cAAc,CAAC,UAAkB;QACvC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,UAAU,IAAI,CAAC;IAC3C,CAAC;IAEO,OAAO,CAAC,UAAkB;QAChC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,UAAU,IAAI,CAAC;IAC3C,CAAC;IAEM,KAAK,CAAC,qBAAqB,CAChC,UAAkB;IAClB,4DAA4D;IAC5D,WAAiB;QAEjB,2CAA2C;QAC3C,iDAAiD;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IACzD,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAC5B,MAAc,EACd,UAAkB;QAElB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QACpE,IAAI,CAAC,YAAY,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;SAC3D;QACD,IAAI,YAAY,KAAK,MAAM,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;SAC1E;QACD,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IACxD,CAAC;IAEM,KAAK,CAAC,WAAW,CACtB,OAA2B;QAE3B,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QAEzD,MAAM,MAAM,GAAG,IAAA,SAAE,GAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CACjC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EACxB,MAAM,EACN,gCAAgC,EAChC,WAAW,CAAC,OAAO,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,EAC7C,0BAA0B,CAC3B,CAAC;QAEF,eAAe;QACf,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAChC,OAAO,MAAM,CAAC;SACf;QACD,0EAA0E;QAC1E,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC;SACb;QACD,mCAAmC;QACnC,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,EAAE,CAAC,CAAC;IAC5D,CAAC;IAEM,KAAK,CAAC,WAAW,CACtB,MAAc,EACd,OAA2B;QAE3B,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC;QAEnD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAEjC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QACtE,IAAI,cAAc,KAAK,MAAM,EAAE;YAC7B,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;SACH;QAED,IAAI;YACF,IAAI,kBAAkB,EAAE;gBACtB,MAAM,EACJ,MAAM,EAAE,EAAE,WAAW,EAAE,EACvB,SAAS,EACT,WAAW,GACZ,GAAG,OAAO,CAAC;gBAEZ,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAClB,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAC/B,WAAW,EACX,gCAAgC,EAChC,SAAS,CAAC,OAAO,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,CAC5C,CAAC;aACH;SACF;gBAAS;YACR,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;SACjC;IACH,CAAC;CACF;AAzHD,wDAyHC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokensRepository_RedisWithMemoryFallback.js","sourceRoot":"","sources":["../../src/oauth-manager/TokensRepository_RedisWithMemoryFallback.ts"],"names":[],"mappings":";;;AAUA,MAAa,wCAAwC;IAGnD,YACmB,SAAgD,EAChD,UAA4B,EAC5B,GAAW;QAFX,cAAS,GAAT,SAAS,CAAuC;QAChD,eAAU,GAAV,UAAU,CAAkB;QAC5B,QAAG,GAAH,GAAG,CAAQ;QAGtB,eAAU,GAAqB,IAAI,CAAC,SAAS,CAAC;QAC9C,uBAAkB,GAAG,KAAK,CAAC;IAHhC,CAAC;IAKI,KAAK,CAAC,OAAO;QACnB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC5B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;YACvD,IAAI,CAAC,WAAW,EAAE;gBAChB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;aACxE;YACD,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;YACjE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;SAChC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;
|
|
1
|
+
{"version":3,"file":"TokensRepository_RedisWithMemoryFallback.js","sourceRoot":"","sources":["../../src/oauth-manager/TokensRepository_RedisWithMemoryFallback.ts"],"names":[],"mappings":";;;AAUA,MAAa,wCAAwC;IAGnD,YACmB,SAAgD,EAChD,UAA4B,EAC5B,GAAW;QAFX,cAAS,GAAT,SAAS,CAAuC;QAChD,eAAU,GAAV,UAAU,CAAkB;QAC5B,QAAG,GAAH,GAAG,CAAQ;QAGtB,eAAU,GAAqB,IAAI,CAAC,SAAS,CAAC;QAC9C,uBAAkB,GAAG,KAAK,CAAC;IAHhC,CAAC;IAKI,KAAK,CAAC,OAAO;QACnB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC5B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;YACvD,IAAI,CAAC,WAAW,EAAE;gBAChB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;aACxE;YACD,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;YACjE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;SAChC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAEM,KAAK,CAAC,qBAAqB,CAChC,UAAkB,EAClB,WAAiB;QAEjB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAC7D,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAC5B,MAAc,EACd,UAAkB;QAElB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACpD,CAAC;IAEM,KAAK,CAAC,WAAW,CACtB,OAA2B;QAE3B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,WAAW,CACtB,MAAc,EACd,OAA2B;QAE3B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;CACF;AAtDD,4FAsDC"}
|
|
@@ -5,19 +5,17 @@ const assert_1 = require("assert");
|
|
|
5
5
|
const ioredis_1 = require("ioredis");
|
|
6
6
|
const envHosts_1 = require("../../common/envHosts");
|
|
7
7
|
const AuthenticationService_PrivateAPI_1 = require("../AuthenticationService_PrivateAPI");
|
|
8
|
-
const
|
|
8
|
+
const SweepbrightOAuthManager_1 = require("../SweepbrightOAuthManager");
|
|
9
9
|
const TokensRepository_Memory_1 = require("../TokensRepository_Memory");
|
|
10
10
|
const TokensRepository_Redis_1 = require("../TokensRepository_Redis");
|
|
11
11
|
const TokensRepository_RedisWithMemoryFallback_1 = require("../TokensRepository_RedisWithMemoryFallback");
|
|
12
|
-
function
|
|
13
|
-
const { env, apiVersion, storage, logger = console } = opt;
|
|
14
|
-
const baseUrl = envHosts_1.envHosts[env];
|
|
15
|
-
(0, assert_1.ok)(baseUrl, 'baseUrl should be defined');
|
|
12
|
+
function createTokenStorage(opt, logger) {
|
|
16
13
|
let tokensRepository;
|
|
17
|
-
switch (storage) {
|
|
14
|
+
switch (opt.storage) {
|
|
18
15
|
case 'redis': {
|
|
19
16
|
const redis = new ioredis_1.Redis(opt.redisURL, {
|
|
20
17
|
maxRetriesPerRequest: 2,
|
|
18
|
+
connectTimeout: 1000,
|
|
21
19
|
});
|
|
22
20
|
tokensRepository = new TokensRepository_RedisWithMemoryFallback_1.TokensRepository_RedisWithMemoryFallback(new TokensRepository_Redis_1.TokensRepository_Redis(redis, logger), new TokensRepository_Memory_1.TokensRepository_Memory(logger), logger);
|
|
23
21
|
break;
|
|
@@ -29,7 +27,13 @@ function createOAuthManager(opt) {
|
|
|
29
27
|
default:
|
|
30
28
|
(0, assert_1.fail)('unknown storage');
|
|
31
29
|
}
|
|
32
|
-
return
|
|
30
|
+
return tokensRepository;
|
|
31
|
+
}
|
|
32
|
+
function createOAuthManager(opt) {
|
|
33
|
+
const { env, apiVersion, logger = console } = opt;
|
|
34
|
+
const baseUrl = envHosts_1.envHosts[env];
|
|
35
|
+
(0, assert_1.ok)(baseUrl, 'baseUrl should be defined');
|
|
36
|
+
return new SweepbrightOAuthManager_1.SweepbrightOAuthManager(createTokenStorage(opt, logger), new AuthenticationService_PrivateAPI_1.AuthenticationService_PrivateAPI({ baseUrl, apiVersion }), logger);
|
|
33
37
|
}
|
|
34
38
|
exports.createOAuthManager = createOAuthManager;
|
|
35
39
|
//# sourceMappingURL=createOAuthManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createOAuthManager.js","sourceRoot":"","sources":["../../../src/oauth-manager/factories/createOAuthManager.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;AAClC,qCAAgC;AAChC,oDAAiD;AAEjD,0FAAuF;AACvF,
|
|
1
|
+
{"version":3,"file":"createOAuthManager.js","sourceRoot":"","sources":["../../../src/oauth-manager/factories/createOAuthManager.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;AAClC,qCAAgC;AAChC,oDAAiD;AAEjD,0FAAuF;AACvF,wEAAqE;AACrE,wEAAqE;AACrE,sEAAmE;AACnE,0GAAuG;AAoBvG,SAAS,kBAAkB,CAAC,GAA8B,EAAE,MAAc;IACxE,IAAI,gBAAkC,CAAC;IAEvC,QAAQ,GAAG,CAAC,OAAO,EAAE;QACnB,KAAK,OAAO,CAAC,CAAC;YACZ,MAAM,KAAK,GAAG,IAAI,eAAK,CAAC,GAAG,CAAC,QAAQ,EAAE;gBACpC,oBAAoB,EAAE,CAAC;gBACvB,cAAc,EAAE,IAAI;aACrB,CAAC,CAAC;YAEH,gBAAgB,GAAG,IAAI,mFAAwC,CAC7D,IAAI,+CAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,EACzC,IAAI,iDAAuB,CAAC,MAAM,CAAC,EACnC,MAAM,CACP,CAAC;YACF,MAAM;SACP;QACD,KAAK,QAAQ,CAAC,CAAC;YACb,gBAAgB,GAAG,IAAI,iDAAuB,CAAC,MAAM,CAAC,CAAC;YACvD,MAAM;SACP;QACD;YACE,IAAA,aAAI,EAAC,iBAAiB,CAAC,CAAC;KAC3B;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,SAAgB,kBAAkB,CAChC,GAA8B;IAE9B,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,EAAE,GAAG,GAAG,CAAC;IAClD,MAAM,OAAO,GAAG,mBAAQ,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAA,WAAE,EAAC,OAAO,EAAE,2BAA2B,CAAC,CAAC;IAEzC,OAAO,IAAI,iDAAuB,CAChC,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,EAC/B,IAAI,mEAAgC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAC7D,MAAM,CACP,CAAC;AACJ,CAAC;AAZD,gDAYC"}
|
package/package.json
CHANGED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.OAuthManager_Impl = void 0;
|
|
4
|
-
const SECOND = 1000;
|
|
5
|
-
const LOCK_TTL = 10 * SECOND;
|
|
6
|
-
const MANAGER_POLLING_INTERVAL = 2 * SECOND;
|
|
7
|
-
const MANAGER_POLLING_TIMEOUT = 20 * SECOND;
|
|
8
|
-
class OAuthManager_Impl {
|
|
9
|
-
constructor(tokensRepository, authenticationService, log) {
|
|
10
|
-
this.tokensRepository = tokensRepository;
|
|
11
|
-
this.authenticationService = authenticationService;
|
|
12
|
-
this.log = log;
|
|
13
|
-
}
|
|
14
|
-
getLockTimeFromCurrentTime(currentTime) {
|
|
15
|
-
return new Date(currentTime.getTime() + LOCK_TTL);
|
|
16
|
-
}
|
|
17
|
-
async sleep(ms) {
|
|
18
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
19
|
-
}
|
|
20
|
-
expiresInToExpiresAt(expiresIn, issuedAt) {
|
|
21
|
-
return new Date(issuedAt.getTime() + expiresIn * SECOND);
|
|
22
|
-
}
|
|
23
|
-
async getAccessTokenBySessionData(sessionData, options = {}) {
|
|
24
|
-
const { log } = this;
|
|
25
|
-
const { forceInvalidate } = options;
|
|
26
|
-
const sessionKey = sessionData.getSessionKey();
|
|
27
|
-
if (!forceInvalidate) {
|
|
28
|
-
const accessToken = await this.tokensRepository.getAccessTokenIfValid(sessionKey, new Date());
|
|
29
|
-
if (accessToken) {
|
|
30
|
-
log.debug('access token reused');
|
|
31
|
-
return accessToken;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
const lockAcquiredAt = new Date();
|
|
35
|
-
const lockId = await this.tokensRepository.acquireLock({
|
|
36
|
-
currentTime: lockAcquiredAt,
|
|
37
|
-
sessionKey,
|
|
38
|
-
lockedUntil: this.getLockTimeFromCurrentTime(lockAcquiredAt),
|
|
39
|
-
});
|
|
40
|
-
if (lockId) {
|
|
41
|
-
let tokens = null;
|
|
42
|
-
const cleanUpLock = async () => {
|
|
43
|
-
await this.tokensRepository.releaseLock(lockId, {
|
|
44
|
-
shouldUpdateTokens: false,
|
|
45
|
-
sessionKey,
|
|
46
|
-
});
|
|
47
|
-
};
|
|
48
|
-
try {
|
|
49
|
-
if (forceInvalidate) {
|
|
50
|
-
// Remove ASAP the token to be invalidated
|
|
51
|
-
await this.tokensRepository.deleteAccessToken(lockId, sessionKey);
|
|
52
|
-
}
|
|
53
|
-
log.debug('authentication');
|
|
54
|
-
tokens = await this.authenticationService.authenticate(sessionData);
|
|
55
|
-
}
|
|
56
|
-
catch (e) {
|
|
57
|
-
log.debug('authentication failed, error', e);
|
|
58
|
-
await cleanUpLock();
|
|
59
|
-
throw new Error('Failed to authenticate');
|
|
60
|
-
}
|
|
61
|
-
const issuedAt = new Date();
|
|
62
|
-
if (!tokens) {
|
|
63
|
-
log.debug('authentication failed, wrong credentials');
|
|
64
|
-
await cleanUpLock();
|
|
65
|
-
return null;
|
|
66
|
-
}
|
|
67
|
-
log.debug('authentication succeeded');
|
|
68
|
-
await this.tokensRepository.releaseLock(lockId, {
|
|
69
|
-
shouldUpdateTokens: true,
|
|
70
|
-
sessionKey,
|
|
71
|
-
tokens,
|
|
72
|
-
expiresAt: this.expiresInToExpiresAt(tokens.expiresIn, issuedAt),
|
|
73
|
-
currentTime: issuedAt,
|
|
74
|
-
});
|
|
75
|
-
return tokens.accessToken;
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
// Locked by another process. We need to wait for the token
|
|
79
|
-
// to become available (using polling).
|
|
80
|
-
// Or fail on timeout.
|
|
81
|
-
const startedAt = new Date();
|
|
82
|
-
for (;;) {
|
|
83
|
-
const accessToken = await this.tokensRepository.getAccessTokenIfValid(sessionKey, new Date());
|
|
84
|
-
if (accessToken) {
|
|
85
|
-
log.debug('access token reused');
|
|
86
|
-
return accessToken;
|
|
87
|
-
}
|
|
88
|
-
if (new Date().getTime() >
|
|
89
|
-
startedAt.getTime() + MANAGER_POLLING_TIMEOUT) {
|
|
90
|
-
throw new Error('Timed out');
|
|
91
|
-
}
|
|
92
|
-
await this.sleep(MANAGER_POLLING_INTERVAL);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
exports.OAuthManager_Impl = OAuthManager_Impl;
|
|
98
|
-
//# sourceMappingURL=OAuthManager_Impl.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OAuthManager_Impl.js","sourceRoot":"","sources":["../../src/oauth-manager/OAuthManager_Impl.ts"],"names":[],"mappings":"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"}
|