@sweepbright/api-client 0.40.2 → 0.40.4-pre.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/README.md +6 -1
- package/dist/client.js +18 -17
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/oauth-manager/SweepbrightOAuthManager.js +5 -1
- package/dist/oauth-manager/SweepbrightOAuthManager.js.map +1 -1
- package/dist/oauth-manager/TokensRepository_Redis.d.ts +1 -0
- package/dist/oauth-manager/TokensRepository_Redis.js +5 -1
- package/dist/oauth-manager/TokensRepository_Redis.js.map +1 -1
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -39,6 +39,11 @@ against the private API. This is done by call the `authorize` function of the cl
|
|
|
39
39
|
> Currently this library does not provide a way to acquire such tokens.
|
|
40
40
|
> It assumes you already have one. To set a user token the method `withUserToken` on the client is available
|
|
41
41
|
|
|
42
|
+
> **NOTE** In the `SweepbrightOAuthManager` method `getAccessTokenBySessionData`, we use a mutex to prevent concurrent access-token
|
|
43
|
+
> requests for the same session. We ran into issues with the Redis client under parallel execution: if multiple auth calls fire at
|
|
44
|
+
> once, they can race when setting the token and end up hitting the private API or Redis multiple times. To fix this, we introduced
|
|
45
|
+
> the async-mutex library and wrap our authorization logic in a runExclusive block so it only ever runs once per session.
|
|
46
|
+
|
|
42
47
|
### Estates - getOne
|
|
43
48
|
|
|
44
49
|
Takes a single `options` parameter and returns a promise with the estate data
|
|
@@ -183,4 +188,4 @@ In `master` branch:
|
|
|
183
188
|
- go to [Releases / Tags](https://github.com/sweepbright/api-client-js/tags)
|
|
184
189
|
- find your new tag and click "Create Release From Tag" button
|
|
185
190
|
- save the release
|
|
186
|
-
- go to [Actions](https://github.com/sweepbright/api-client-js/actions) and make sure the NPM package is being published
|
|
191
|
+
- go to [Actions](https://github.com/sweepbright/api-client-js/actions) and make sure the NPM package is being published
|
package/dist/client.js
CHANGED
|
@@ -4,8 +4,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.ClientImpl = void 0;
|
|
7
|
-
const async_mutex_1 = require("async-mutex");
|
|
8
7
|
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const lodash_1 = require("lodash");
|
|
9
9
|
const tiny_invariant_1 = __importDefault(require("tiny-invariant"));
|
|
10
10
|
const envHosts_1 = require("./common/envHosts");
|
|
11
11
|
const logRequest_1 = require("./common/logRequest");
|
|
@@ -26,7 +26,6 @@ const negotiators_1 = __importDefault(require("./resources/negotiators"));
|
|
|
26
26
|
const offices_1 = __importDefault(require("./resources/offices"));
|
|
27
27
|
const types_1 = require("./types");
|
|
28
28
|
const utils_1 = require("./utils");
|
|
29
|
-
const authorizationMutex = new async_mutex_1.Mutex();
|
|
30
29
|
const getDefaultAuthConfig = (conf, logger) => {
|
|
31
30
|
return {
|
|
32
31
|
storage: 'memory',
|
|
@@ -68,25 +67,21 @@ class ClientImpl {
|
|
|
68
67
|
throw new ApiClientError_1.ApiClientError('Client is not authenticated');
|
|
69
68
|
}
|
|
70
69
|
if (this._auth.type !== tokenType) {
|
|
71
|
-
throw new ApiClientError_1.ApiClientError(
|
|
70
|
+
throw new ApiClientError_1.ApiClientError(`Authenticated with invalid token type expected ${tokenType} got ${this._auth.type}`);
|
|
72
71
|
}
|
|
73
72
|
},
|
|
74
73
|
};
|
|
75
74
|
}
|
|
76
75
|
async authorizeWithOAuthManager(clientId, clientSecret, scopes, options) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
this._auth = { token: accessToken, type: types_1.TokenType.API_TOKEN, scopes };
|
|
87
|
-
this.httpClient.defaults.headers.common['Authorization'] = `Bearer ${accessToken}`;
|
|
88
|
-
});
|
|
89
|
-
this.logger?.debug('End authorization mutex');
|
|
76
|
+
if (this.isAuthorized({ scopes })) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const accessToken = await this.localAuthManager.getAccessTokenBySessionData(new SessionDataImpl_1.SessionDataImpl({ clientId, clientSecret, scopes }), options);
|
|
80
|
+
if (!accessToken) {
|
|
81
|
+
throw new ApiClientError_1.ApiClientError('Authentication failed');
|
|
82
|
+
}
|
|
83
|
+
this._auth = { token: accessToken, type: types_1.TokenType.API_TOKEN, scopes };
|
|
84
|
+
this.httpClient.defaults.headers.common['Authorization'] = `Bearer ${accessToken}`;
|
|
90
85
|
}
|
|
91
86
|
resetAuth() {
|
|
92
87
|
this._auth = null;
|
|
@@ -131,7 +126,13 @@ class ClientImpl {
|
|
|
131
126
|
}
|
|
132
127
|
isAuthorized(config = {}) {
|
|
133
128
|
const { scopes = ['companies:read', 'properties:download', 'lead_info:write'], } = config;
|
|
134
|
-
return
|
|
129
|
+
return (this._auth !== undefined &&
|
|
130
|
+
this._auth !== null &&
|
|
131
|
+
this._auth.token !== undefined &&
|
|
132
|
+
this._auth.token !== null &&
|
|
133
|
+
this._auth.type !== undefined &&
|
|
134
|
+
this._auth.type !== null &&
|
|
135
|
+
(0, lodash_1.isEqual)(scopes, this._auth.scopes));
|
|
135
136
|
}
|
|
136
137
|
getCurrentToken() {
|
|
137
138
|
return this._auth?.token ?? '';
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0C;AAC1C,mCAAiC;AACjC,oEAAuC;AACvC,gDAA6C;AAC7C,oDAAiD;AACjD,sDAAmD;AACnD,uDAAiD;AACjD,4DAAyD;AACzD,qEAAkE;AAClE,+GAA4G;AAG5G,oFAA2D;AAC3D,oEAA4C;AAC5C,sEAA8C;AAC9C,0FAAkE;AAClE,oEAA4C;AAC5C,kEAA0C;AAC1C,gEAAwC;AACxC,8DAAsC;AACtC,0EAAkD;AAClD,kEAA0C;AAC1C,mCAQiB;AACjB,mCAAwD;AAExD,MAAM,oBAAoB,GAAG,CAC3B,IAAgB,EAChB,MAAe,EACY,EAAE;IAC7B,OAAO;QACL,OAAO,EAAE,QAAQ;QACjB,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,WAAG,CAAC,UAAU;QAC/B,UAAU,EAAE,IAAI,CAAC,OAAO;QACxB,MAAM,EAAE,MAAM;KACf,CAAC;AACJ,CAAC,CAAC;AAEF,MAAa,UAAU;IAQrB,YACmB,IAAgB,EAChB,MAAe;QADf,SAAI,GAAJ,IAAI,CAAY;QAChB,WAAM,GAAN,MAAM,CAAS;QAT1B,UAAK,GAAgB,IAAI,CAAC;QAC1B,uCAAkC,GAEtC,IAAI,CAAC;QAQP,MAAM,EAAE,GAAG,GAAG,WAAG,CAAC,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;QAE7D,IAAI,CAAC,gBAAgB;YACnB,YAAY;gBACZ,IAAA,iEAA+B,EAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACtE,IAAI,CAAC,UAAU,GAAG,eAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,mBAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YACnD,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,cAAc,EAAE,IAAA,uBAAU,EAAC,OAAO,CAAC,CAAC,CAAC;YACxD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YACrD,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,eAAe,EAAE,IAAA,yBAAW,EAAC,QAAQ,CAAC,CAAC,CAAC;YAC3D,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAO,EAAE,4BAAoB,CAAC,CAAC;QACzE,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CACrC,QAAQ,CACT,GAAG,+BAA+B,OAAO,OAAO,CAAC;QACpD,CAAC;IACH,CAAC;IAEO,UAAU;QAChB,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,CAAC,SAAoB,EAAE,EAAE;gBAClC,IACE,CAAC,IAAI,CAAC,KAAK;oBACX,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,EACzD,CAAC;oBACD,MAAM,IAAI,+BAAc,CAAC,6BAA6B,CAAC,CAAC;gBAC1D,CAAC;gBACD,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAClC,MAAM,IAAI,+BAAc,CACtB,kDAAkD,SAAS,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CACrF,CAAC;gBACJ,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,yBAAyB,CACrC,QAAgB,EAChB,YAAoB,EACpB,MAAgB,EAChB,OAA+B;QAE/B,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YAClC,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CACzE,IAAI,iCAAe,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,EACvD,OAAO,CACR,CAAC;QAEF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,+BAAc,CAAC,uBAAuB,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAS,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;QACvE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CACrC,eAAe,CAChB,GAAG,UAAU,WAAW,EAAE,CAAC;IAC9B,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,SAAmB,EAAE;QAC1C,IAAI,CAAC;YACH,MAAM,EACJ,MAAM,GAAG,CAAC,gBAAgB,EAAE,qBAAqB,EAAE,iBAAiB,CAAC,GACtE,GAAG,MAAM,CAAC;YACX,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;YAE7C,IAAA,wBAAS,EAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;YACzC,IAAA,wBAAS,EAAC,YAAY,EAAE,uBAAuB,CAAC,CAAC;YAEjD,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;gBAClC,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,CAAC,kCAAkC,GAAG,KAAK,EAAE,KAAiB,EAAE,EAAE;gBACpE,IAAI,KAAK,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC1B,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,2BAA2B,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;oBACtE,IAAI,CAAC,SAAS,EAAE,CAAC;oBACjB,MAAM,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE;wBACnE,eAAe,EAAE,IAAI;qBACtB,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CACvC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EACZ,KAAK,EAAE,KAAK,EAAE,EAAE;gBACd,IAAI,IAAI,CAAC,kCAAkC,EAAE,CAAC;oBAC5C,MAAM,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;gBACvD,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC,CACF,CAAC;YAEF,MAAM,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAA,8BAAY,EAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACjC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,WAAmB;QAC5C,IAAI,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAS,CAAC,UAAU,EAAE,CAAC;QAChE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CACrC,eAAe,CAChB,GAAG,UAAU,WAAW,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,YAAY,CAAC,SAAmB,EAAE;QACvC,MAAM,EACJ,MAAM,GAAG,CAAC,gBAAgB,EAAE,qBAAqB,EAAE,iBAAiB,CAAC,GACtE,GAAG,MAAM,CAAC;QACX,OAAO,CACL,IAAI,CAAC,KAAK,KAAK,SAAS;YACxB,IAAI,CAAC,KAAK,KAAK,IAAI;YACnB,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS;YAC9B,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI;YACzB,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS;YAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI;YACxB,IAAA,gBAAO,EAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CACnC,CAAC;IACJ,CAAC;IAEM,eAAe;QACpB,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC;IACjC,CAAC;IAED,IAAW,KAAK;QACd,OAAO,IAAA,eAAK,EAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,IAAW,WAAW;QACpB,OAAO,IAAA,qBAAW,EAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,IAAA,iBAAO,EAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,IAAW,QAAQ;QACjB,OAAO,IAAA,kBAAQ,EAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,IAAW,eAAe;QACxB,OAAO,IAAA,0BAAe,EAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,IAAW,QAAQ;QACjB,OAAO,IAAA,kBAAQ,EAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,IAAW,SAAS;QAClB,OAAO,IAAA,mBAAS,EAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,IAAW,kBAAkB;QAC3B,OAAO,IAAA,6BAAmB,EAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,IAAA,iBAAO,EAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,IAAW,MAAM;QACf,OAAO,IAAA,gBAAM,EAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACnC,CAAC;CACF;AA9LD,gCA8LC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { SessionDataImpl } from './oauth-manager/SessionDataImpl';
|
|
2
|
+
import { SweepbrightOAuthManager } from './oauth-manager/SweepbrightOAuthManager';
|
|
1
3
|
import { createCustomEndpointAuthManager } from './oauth-manager/factories/createCustomEndpointAuthManager';
|
|
2
4
|
import { createOAuthManager } from './oauth-manager/factories/createOAuthManager';
|
|
3
5
|
import { CreateOAuthManagerOptions } from './oauth-manager/factories/entities';
|
|
4
|
-
import { Logger } from './oauth-manager/interfaces';
|
|
6
|
+
import { Logger, OAuthManager, SessionData } from './oauth-manager/interfaces';
|
|
5
7
|
import { Client, ClientConf, Env } from './types';
|
|
6
8
|
declare function createClient(conf: ClientConf, logger?: Logger): Client;
|
|
7
|
-
export { Client, Env, CreateOAuthManagerOptions, createClient, createCustomEndpointAuthManager, createOAuthManager, };
|
|
9
|
+
export { Client, Env, CreateOAuthManagerOptions, SweepbrightOAuthManager, OAuthManager, SessionData, SessionDataImpl, createClient, createCustomEndpointAuthManager, createOAuthManager, };
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createOAuthManager = exports.createCustomEndpointAuthManager = exports.Env = void 0;
|
|
3
|
+
exports.createOAuthManager = exports.createCustomEndpointAuthManager = exports.SessionDataImpl = exports.SweepbrightOAuthManager = exports.Env = void 0;
|
|
4
4
|
exports.createClient = createClient;
|
|
5
5
|
const client_1 = require("./client");
|
|
6
|
+
const SessionDataImpl_1 = require("./oauth-manager/SessionDataImpl");
|
|
7
|
+
Object.defineProperty(exports, "SessionDataImpl", { enumerable: true, get: function () { return SessionDataImpl_1.SessionDataImpl; } });
|
|
8
|
+
const SweepbrightOAuthManager_1 = require("./oauth-manager/SweepbrightOAuthManager");
|
|
9
|
+
Object.defineProperty(exports, "SweepbrightOAuthManager", { enumerable: true, get: function () { return SweepbrightOAuthManager_1.SweepbrightOAuthManager; } });
|
|
6
10
|
const createCustomEndpointAuthManager_1 = require("./oauth-manager/factories/createCustomEndpointAuthManager");
|
|
7
11
|
Object.defineProperty(exports, "createCustomEndpointAuthManager", { enumerable: true, get: function () { return createCustomEndpointAuthManager_1.createCustomEndpointAuthManager; } });
|
|
8
12
|
const createOAuthManager_1 = require("./oauth-manager/factories/createOAuthManager");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAqBE,oCAAY;AArBd,qCAAsC;AACtC,qEAAkE;AAmBhE,gGAnBO,iCAAe,OAmBP;AAlBjB,qFAAkF;AAehF,wGAfO,iDAAuB,OAeP;AAdzB,+GAA4G;AAmB1G,gHAnBO,iEAA+B,OAmBP;AAlBjC,qFAAkF;AAmBhF,mGAnBO,uCAAkB,OAmBP;AAhBpB,mCAAkD;AAQhD,oFAR2B,WAAG,OAQ3B;AANL,SAAS,YAAY,CAAC,IAAgB,EAAE,MAAe;IACrD,OAAO,IAAI,mBAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -2,12 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SweepbrightOAuthManager = void 0;
|
|
4
4
|
/* eslint no-console: "error" */
|
|
5
|
+
const async_mutex_1 = require("async-mutex");
|
|
5
6
|
const sleep_1 = require("../common/sleep");
|
|
6
7
|
const OAuthApiClientError_1 = require("../errors/OAuthApiClientError");
|
|
7
8
|
const SECOND = 1000;
|
|
8
9
|
const LOCK_TTL = 10 * SECOND;
|
|
9
10
|
const MANAGER_POLLING_INTERVAL = 2 * SECOND;
|
|
10
11
|
const MANAGER_POLLING_TIMEOUT = 20 * SECOND;
|
|
12
|
+
const authorizationMutex = new async_mutex_1.Mutex();
|
|
11
13
|
class SweepbrightOAuthManager {
|
|
12
14
|
constructor(tokensRepository, authenticationService, log) {
|
|
13
15
|
this.tokensRepository = tokensRepository;
|
|
@@ -80,7 +82,9 @@ class SweepbrightOAuthManager {
|
|
|
80
82
|
}
|
|
81
83
|
async getAccessTokenBySessionData(sessionData, options = {}) {
|
|
82
84
|
try {
|
|
83
|
-
|
|
85
|
+
// needed to prevent errors on concurrent redis request with node-redis https://github.com/redis/node-redis/issues/2704
|
|
86
|
+
const result = await authorizationMutex.runExclusive(async () => this._getAccessTokenBySessionData(sessionData, options));
|
|
87
|
+
return result;
|
|
84
88
|
}
|
|
85
89
|
catch (e) {
|
|
86
90
|
this.log.warn('Failed to get access token');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SweepbrightOAuthManager.js","sourceRoot":"","sources":["../../src/oauth-manager/SweepbrightOAuthManager.ts"],"names":[],"mappings":";;;AAAA,gCAAgC;AAChC,2CAAwC;AACxC,uEAAoE;AAYpE,MAAM,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"SweepbrightOAuthManager.js","sourceRoot":"","sources":["../../src/oauth-manager/SweepbrightOAuthManager.ts"],"names":[],"mappings":";;;AAAA,gCAAgC;AAChC,6CAAoC;AACpC,2CAAwC;AACxC,uEAAoE;AAYpE,MAAM,MAAM,GAAG,IAAI,CAAC;AACpB,MAAM,QAAQ,GAAG,EAAE,GAAG,MAAM,CAAC;AAC7B,MAAM,wBAAwB,GAAG,CAAC,GAAG,MAAM,CAAC;AAC5C,MAAM,uBAAuB,GAAG,EAAE,GAAG,MAAM,CAAC;AAE5C,MAAM,kBAAkB,GAAG,IAAI,mBAAK,EAAE,CAAC;AAEvC,MAAa,uBAAuB;IAClC,YACmB,gBAAkC,EAClC,qBAA4C,EAC5C,GAAW;QAFX,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,QAAG,GAAH,GAAG,CAAQ;IAC3B,CAAC;IAEI,0BAA0B,CAAC,WAAiB;QAClD,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,CAAC;IACpD,CAAC;IAEO,oBAAoB,CAAC,SAAiB,EAAE,QAAc;QAC5D,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,SAAS,GAAG,MAAM,CAAC,CAAC;IAC3D,CAAC;IAEO,WAAW,CAAC,MAAc,EAAE,UAAkB;QACpD,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,MAAM,EAAE;YAC/C,kBAAkB,EAAE,KAAK;YACzB,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,4BAA4B,CACxC,MAAc,EACd,WAAwB,EACxB,eAAyB;QAEzB,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QACrB,IAAI,MAAM,GAAkB,IAAI,CAAC;QACjC,MAAM,UAAU,GAAG,WAAW,CAAC,aAAa,EAAE,CAAC;QAE/C,IAAI,CAAC;YACH,IAAI,eAAe,EAAE,CAAC;gBACpB,0CAA0C;gBAC1C,MAAM,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACpE,CAAC;YAED,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC5B,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,GAAG,CAAC,IAAI,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC;YAC5C,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAC3C,MAAM,IAAI,yCAAmB,CAAC,wBAAwB,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;QAE5B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,GAAG,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;YACrD,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAEtC,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,MAAM,EAAE;YAC9C,kBAAkB,EAAE,IAAI;YACxB,UAAU;YACV,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC;YAChE,WAAW,EAAE,QAAQ;SACtB,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,WAAW,CAAC;IAC5B,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,UAAkB;QACjD,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAErB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC7B,SAAS,CAAC;YACR,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CACnE,UAAU,EACV,IAAI,IAAI,EAAE,CACX,CAAC;YACF,IAAI,WAAW,EAAE,CAAC;gBAChB,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBACjC,OAAO,WAAW,CAAC;YACrB,CAAC;YAED,IACE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;gBACpB,SAAS,CAAC,OAAO,EAAE,GAAG,uBAAuB,EAC7C,CAAC;gBACD,GAAG,CAAC,IAAI,CAAC,mCAAmC,EAAE;oBAC5C,uBAAuB;iBACxB,CAAC,CAAC;gBACH,MAAM,IAAI,yCAAmB,CAAC,qBAAqB,CAAC,CAAC;YACvD,CAAC;YAED,MAAM,IAAA,aAAK,EAAC,wBAAwB,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,2BAA2B,CACtC,WAAwB,EACxB,UAAiC,EAAE;QAEnC,IAAI,CAAC;YACH,uHAAuH;YACvH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE,CAC9D,IAAI,CAAC,4BAA4B,CAAC,WAAW,EAAE,OAAO,CAAC,CACxD,CAAC;YACF,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC5C,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,4BAA4B,CACxC,WAAwB,EACxB,UAAiC,EAAE;QAEnC,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QACrB,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;QACpC,MAAM,UAAU,GAAG,WAAW,CAAC,aAAa,EAAE,CAAC;QAE/C,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CACnE,UAAU,EACV,IAAI,IAAI,EAAE,CACX,CAAC;YACF,IAAI,WAAW,EAAE,CAAC;gBAChB,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBACjC,OAAO,WAAW,CAAC;YACrB,CAAC;QACH,CAAC;QAED,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACnC,MAAM,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;YACrD,WAAW,EAAE,cAAc;YAC3B,UAAU;YACV,WAAW,EAAE,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC;SAC7D,CAAC,CAAC;QAEH,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,4BAA4B,CACtC,MAAM,EACN,WAAW,EACX,eAAe,CAChB,CAAC;QACJ,CAAC;QAED,2DAA2D;QAC3D,uCAAuC;QACvC,sBAAsB;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;CACF;AAtJD,0DAsJC"}
|
|
@@ -5,6 +5,7 @@ export declare class TokensRepository_Redis implements TokensRepository, CanChec
|
|
|
5
5
|
private readonly redis;
|
|
6
6
|
private readonly log;
|
|
7
7
|
private readonly version;
|
|
8
|
+
private readonly expirationMarginMs;
|
|
8
9
|
constructor(redis: RedisClientType | RedisClusterType, log: Logger);
|
|
9
10
|
private forceDisconnect;
|
|
10
11
|
private processRedisError;
|
|
@@ -7,6 +7,7 @@ class TokensRepository_Redis {
|
|
|
7
7
|
this.redis = redis;
|
|
8
8
|
this.log = log;
|
|
9
9
|
this.version = 'v1';
|
|
10
|
+
this.expirationMarginMs = Number(process.env.REDUCE_TTL_MS) || 300000; // 5 minutes
|
|
10
11
|
this.forceDisconnect = async () => {
|
|
11
12
|
// try to force disconnect to connect again on next call
|
|
12
13
|
await this.redis
|
|
@@ -103,8 +104,11 @@ class TokensRepository_Redis {
|
|
|
103
104
|
try {
|
|
104
105
|
if (shouldUpdateTokens) {
|
|
105
106
|
const { tokens: { accessToken }, expiresAt, currentTime, } = options;
|
|
107
|
+
//if less then 0 set to 0
|
|
108
|
+
const ttl = Math.max(expiresAt.getTime() - currentTime.getTime() - this.expirationMarginMs, 0);
|
|
106
109
|
await redis.set(this.accessTokenKey(sessionKey), accessToken, {
|
|
107
|
-
|
|
110
|
+
// to have token expired and updated before it actually expires
|
|
111
|
+
PX: ttl,
|
|
108
112
|
});
|
|
109
113
|
}
|
|
110
114
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokensRepository_Redis.js","sourceRoot":"","sources":["../../src/oauth-manager/TokensRepository_Redis.ts"],"names":[],"mappings":";;;AACA,+BAA0B;AAU1B,MAAa,sBAAsB;
|
|
1
|
+
{"version":3,"file":"TokensRepository_Redis.js","sourceRoot":"","sources":["../../src/oauth-manager/TokensRepository_Redis.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.40.
|
|
2
|
+
"version": "0.40.4-pre.0",
|
|
3
3
|
"license": "UNLICENCED",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"typings": "./dist/index.d.ts",
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"@sweepbright/eslint-config-shared": "^1.0.5",
|
|
32
32
|
"@sweepbright/shared-configs-tsconfig": "^1.0.1",
|
|
33
33
|
"@types/jest": "^29.5.14",
|
|
34
|
+
"@types/lodash": "^4.17.20",
|
|
34
35
|
"@types/redis-mock": "^0.17.3",
|
|
35
36
|
"@types/uuid": "^10.0.0",
|
|
36
37
|
"husky": "^9.1.7",
|
|
@@ -45,6 +46,7 @@
|
|
|
45
46
|
"dependencies": {
|
|
46
47
|
"async-mutex": "^0.5.0",
|
|
47
48
|
"axios": "1.7.9",
|
|
49
|
+
"lodash": "^4.17.21",
|
|
48
50
|
"redis": "^4.7.0",
|
|
49
51
|
"tiny-invariant": "1.3.3",
|
|
50
52
|
"ts-custom-error": "^3.3.1",
|