@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.
@@ -0,0 +1 @@
1
+ export declare function sleep(ms: number): Promise<void>;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sleep = void 0;
4
+ async function sleep(ms) {
5
+ return new Promise((resolve) => setTimeout(resolve, ms));
6
+ }
7
+ exports.sleep = sleep;
8
+ //# sourceMappingURL=sleep.js.map
@@ -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;IAED,KAAK,CAAC,YAAY,CAAC,WAAwB;QACzC,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"}
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.clientId;
33
- const normalizedScopes = this.normalizeScopes(options.scopes);
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;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IACD,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACD,SAAS;QACP,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,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAElC,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE9D,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
+ {"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 OAuthManager_Impl implements OAuthManager {
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":"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"}
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, 'PX', // PX means "TTL in milliseconds"
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, 'PX', // PX means "TTL in milliseconds"
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":"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"}
1
+ {"version":3,"file":"TokensRepository_Redis.js","sourceRoot":"","sources":["../../src/oauth-manager/TokensRepository_Redis.ts"],"names":[],"mappings":"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"}
@@ -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;IAED,KAAK,CAAC,qBAAqB,CACzB,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;IAED,KAAK,CAAC,iBAAiB,CAAC,MAAc,EAAE,UAAkB;QACxD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAA2B;QAC3C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,WAAW,CACf,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;AAjDD,4FAiDC"}
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 OAuthManager_Impl_1 = require("../OAuthManager_Impl");
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 createOAuthManager(opt) {
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 new OAuthManager_Impl_1.OAuthManager_Impl(tokensRepository, new AuthenticationService_PrivateAPI_1.AuthenticationService_PrivateAPI({ baseUrl, apiVersion }), logger);
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,4DAAyD;AACzD,wEAAqE;AACrE,sEAAmE;AACnE,0GAAuG;AAoBvG,SAAgB,kBAAkB,CAChC,GAA8B;IAE9B,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,GAAG,GAAG,CAAC;IAE3D,MAAM,OAAO,GAAG,mBAAQ,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAA,WAAE,EAAC,OAAO,EAAE,2BAA2B,CAAC,CAAC;IAEzC,IAAI,gBAAkC,CAAC;IAEvC,QAAQ,OAAO,EAAE;QACf,KAAK,OAAO,CAAC,CAAC;YACZ,MAAM,KAAK,GAAG,IAAI,eAAK,CAAC,GAAG,CAAC,QAAQ,EAAE;gBACpC,oBAAoB,EAAE,CAAC;aACxB,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,IAAI,qCAAiB,CAC1B,gBAAgB,EAChB,IAAI,mEAAgC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAC7D,MAAM,CACP,CAAC;AACJ,CAAC;AApCD,gDAoCC"}
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,5 +1,5 @@
1
1
  {
2
- "version": "0.31.8-pre-release.1",
2
+ "version": "0.32.0",
3
3
  "license": "UNLICENCED",
4
4
  "main": "./dist/index.js",
5
5
  "typings": "./dist/index.d.ts",
@@ -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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"}