@barchart/portfolio-client-js 1.3.17 → 1.3.18
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/example/example.js +20 -31
- package/lib/gateway/jwt/JwtGateway.js +34 -43
- package/lib/index.js +1 -1
- package/package.json +1 -1
package/example/example.js
CHANGED
|
@@ -2000,7 +2000,8 @@ module.exports = (() => {
|
|
|
2000
2000
|
this._started = false;
|
|
2001
2001
|
this._startPromise = null;
|
|
2002
2002
|
this._endpoint = endpoint;
|
|
2003
|
-
this._refreshInterval = refreshInterval ||
|
|
2003
|
+
this._refreshInterval = refreshInterval || 0;
|
|
2004
|
+
this._refreshJitter = Math.floor(this._refreshInterval / 10);
|
|
2004
2005
|
}
|
|
2005
2006
|
/**
|
|
2006
2007
|
* Initializes the connection to the remote server and returns a promise
|
|
@@ -2055,42 +2056,26 @@ module.exports = (() => {
|
|
|
2055
2056
|
|
|
2056
2057
|
toRequestInterceptor() {
|
|
2057
2058
|
const scheduler = new Scheduler();
|
|
2058
|
-
let
|
|
2059
|
-
let
|
|
2059
|
+
let refreshPromise = null;
|
|
2060
|
+
let refreshTime = null;
|
|
2060
2061
|
|
|
2061
2062
|
const refreshToken = () => {
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
|
|
2072
|
-
}).catch(e => {
|
|
2073
|
-
if (cacheDisposable !== null) {
|
|
2074
|
-
cacheDisposable.dispose();
|
|
2075
|
-
cacheDisposable = null;
|
|
2076
|
-
cachePromise = null;
|
|
2077
|
-
}
|
|
2063
|
+
if (refreshPromise === null || this._refreshInterval > 0 && refreshTime !== null && getTime() > refreshTime + this._refreshInterval + this._refreshJitter) {
|
|
2064
|
+
refreshPromise = scheduler.backoff(() => this.readToken(), 750, 'Read JWT token', 3).then(token => {
|
|
2065
|
+
refreshTime = getTime();
|
|
2066
|
+
return token;
|
|
2067
|
+
}).catch(e => {
|
|
2068
|
+
refreshPromise = null;
|
|
2069
|
+
refreshTime = null;
|
|
2070
|
+
return Promise.reject(e);
|
|
2071
|
+
});
|
|
2072
|
+
}
|
|
2078
2073
|
|
|
2079
|
-
return Promise.reject(e);
|
|
2080
|
-
});
|
|
2081
2074
|
return refreshPromise;
|
|
2082
2075
|
};
|
|
2083
2076
|
|
|
2084
2077
|
const delegate = (options, endpoint) => {
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
if (cachePromise !== null) {
|
|
2088
|
-
tokenPromise = cachePromise;
|
|
2089
|
-
} else {
|
|
2090
|
-
tokenPromise = refreshToken();
|
|
2091
|
-
}
|
|
2092
|
-
|
|
2093
|
-
return tokenPromise.then(token => {
|
|
2078
|
+
return refreshToken().then(token => {
|
|
2094
2079
|
options.headers = options.headers || {};
|
|
2095
2080
|
options.headers.Authorization = `Bearer ${token}`;
|
|
2096
2081
|
return options;
|
|
@@ -2277,6 +2262,10 @@ module.exports = (() => {
|
|
|
2277
2262
|
}
|
|
2278
2263
|
}
|
|
2279
2264
|
|
|
2265
|
+
function getTime() {
|
|
2266
|
+
return new Date().getTime();
|
|
2267
|
+
}
|
|
2268
|
+
|
|
2280
2269
|
function forDevelopment(userId, legacyUserId) {
|
|
2281
2270
|
return EndpointBuilder.for('read-jwt-token-for-development', 'lookup user identity').withVerb(VerbType.GET).withProtocol(ProtocolType.HTTPS).withHost(Configuration.developmentHost).withPathBuilder(pb => {
|
|
2282
2271
|
pb.withLiteralParameter('token', 'token').withLiteralParameter('barchart', 'barchart').withLiteralParameter('generator', 'generator');
|
|
@@ -2334,7 +2323,7 @@ module.exports = (() => {
|
|
|
2334
2323
|
return {
|
|
2335
2324
|
JwtGateway: JwtGateway,
|
|
2336
2325
|
PortfolioGateway: PortfolioGateway,
|
|
2337
|
-
version: '1.3.
|
|
2326
|
+
version: '1.3.18'
|
|
2338
2327
|
};
|
|
2339
2328
|
})();
|
|
2340
2329
|
|
|
@@ -37,7 +37,9 @@ module.exports = (() => {
|
|
|
37
37
|
this._startPromise = null;
|
|
38
38
|
|
|
39
39
|
this._endpoint = endpoint;
|
|
40
|
-
|
|
40
|
+
|
|
41
|
+
this._refreshInterval = refreshInterval || 0;
|
|
42
|
+
this._refreshJitter = Math.floor(this._refreshInterval / 10);
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
/**
|
|
@@ -97,56 +99,41 @@ module.exports = (() => {
|
|
|
97
99
|
toRequestInterceptor() {
|
|
98
100
|
const scheduler = new Scheduler();
|
|
99
101
|
|
|
100
|
-
let
|
|
101
|
-
let
|
|
102
|
+
let refreshPromise = null;
|
|
103
|
+
let refreshTime = null;
|
|
102
104
|
|
|
103
105
|
const refreshToken = () => {
|
|
104
|
-
|
|
105
|
-
.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
cacheDisposable.dispose();
|
|
118
|
-
|
|
119
|
-
cacheDisposable = null;
|
|
120
|
-
cachePromise = null;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
return Promise.reject(e);
|
|
124
|
-
});
|
|
106
|
+
if (refreshPromise === null || (this._refreshInterval > 0 && refreshTime !== null && getTime() > (refreshTime + this._refreshInterval + this._refreshJitter))) {
|
|
107
|
+
refreshPromise = scheduler.backoff(() => this.readToken(), 750, 'Read JWT token', 3)
|
|
108
|
+
.then((token) => {
|
|
109
|
+
refreshTime = getTime();
|
|
110
|
+
|
|
111
|
+
return token;
|
|
112
|
+
}).catch((e) => {
|
|
113
|
+
refreshPromise = null;
|
|
114
|
+
refreshTime = null;
|
|
115
|
+
|
|
116
|
+
return Promise.reject(e);
|
|
117
|
+
});
|
|
118
|
+
}
|
|
125
119
|
|
|
126
120
|
return refreshPromise;
|
|
127
121
|
};
|
|
128
122
|
|
|
129
123
|
const delegate = (options, endpoint) => {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
} else {
|
|
135
|
-
tokenPromise = refreshToken();
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
return tokenPromise.then((token) => {
|
|
139
|
-
options.headers = options.headers || { };
|
|
140
|
-
options.headers.Authorization = `Bearer ${token}`;
|
|
124
|
+
return refreshToken()
|
|
125
|
+
.then((token) => {
|
|
126
|
+
options.headers = options.headers || { };
|
|
127
|
+
options.headers.Authorization = `Bearer ${token}`;
|
|
141
128
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
129
|
+
return options;
|
|
130
|
+
}).catch((e) => {
|
|
131
|
+
const failure = FailureReason.forRequest({ endpoint: endpoint })
|
|
145
132
|
.addItem(FailureType.REQUEST_IDENTITY_FAILURE)
|
|
146
133
|
.format();
|
|
147
134
|
|
|
148
|
-
|
|
149
|
-
|
|
135
|
+
return Promise.reject(failure);
|
|
136
|
+
});
|
|
150
137
|
};
|
|
151
138
|
|
|
152
139
|
return RequestInterceptor.fromDelegate(delegate);
|
|
@@ -319,6 +306,10 @@ module.exports = (() => {
|
|
|
319
306
|
}
|
|
320
307
|
}
|
|
321
308
|
|
|
309
|
+
function getTime() {
|
|
310
|
+
return (new Date()).getTime();
|
|
311
|
+
}
|
|
312
|
+
|
|
322
313
|
function forDevelopment(userId, legacyUserId) {
|
|
323
314
|
return EndpointBuilder.for('read-jwt-token-for-development', 'lookup user identity')
|
|
324
315
|
.withVerb(VerbType.GET)
|
|
@@ -366,9 +357,9 @@ module.exports = (() => {
|
|
|
366
357
|
})
|
|
367
358
|
.withQueryBuilder((qb) => {
|
|
368
359
|
qb.withLiteralParameter('user', 'userId', userId)
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
360
|
+
.withLiteralParameter('legacy user', 'userLegacyId', userId)
|
|
361
|
+
.withLiteralParameter('user context', 'userContext', 'Barchart')
|
|
362
|
+
.withLiteralParameter('user permission level', 'userPermissions', 'registered');
|
|
372
363
|
})
|
|
373
364
|
.withResponseInterceptor(ResponseInterceptor.DATA)
|
|
374
365
|
.endpoint;
|
package/lib/index.js
CHANGED