@auxilium/datalynk-client 1.5.0 → 1.5.1
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 +1 -1
- package/dist/api.d.ts +7 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/index.cjs +62 -6
- package/dist/index.mjs +62 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -555,7 +555,7 @@ session.disconnect();
|
|
|
555
555
|
|
|
556
556
|
</details>
|
|
557
557
|
|
|
558
|
-
## Request-owned API recovery (1.5.
|
|
558
|
+
## Request-owned API recovery (1.5.1)
|
|
559
559
|
|
|
560
560
|
When a request receives a server-side response failure (HTTP 5xx, malformed/non-JSON API response, or SQLSTATE error), the client now:
|
|
561
561
|
|
package/dist/api.d.ts
CHANGED
|
@@ -47,6 +47,8 @@ export type ApiOptions = {
|
|
|
47
47
|
origin?: string;
|
|
48
48
|
/** Save session token to localStorage to persist logins */
|
|
49
49
|
saveSession?: boolean;
|
|
50
|
+
/** Watch JWT expiry. This is always disabled on development hosts. */
|
|
51
|
+
watchTokenExpiry?: boolean;
|
|
50
52
|
/** Service worker URL */
|
|
51
53
|
serviceWorker?: string;
|
|
52
54
|
/** Disable sockets with false or override socket URL */
|
|
@@ -149,6 +151,7 @@ export declare class Api {
|
|
|
149
151
|
private readonly recoveryImmediateRetries;
|
|
150
152
|
/** LocalStorage key for persisting logins */
|
|
151
153
|
private localStorageKey;
|
|
154
|
+
private tokenStorageListener;
|
|
152
155
|
/** Pending requests cache */
|
|
153
156
|
private pending;
|
|
154
157
|
/** Helpers */
|
|
@@ -260,6 +263,10 @@ export declare class Api {
|
|
|
260
263
|
private cancelRecovery;
|
|
261
264
|
private checkConnection;
|
|
262
265
|
private isTokenExpired;
|
|
266
|
+
private isDevelopmentEnvironment;
|
|
267
|
+
private canAdoptToken;
|
|
268
|
+
/** Adopt a newer canonical token written by another auth path before expiring this session. */
|
|
269
|
+
private adoptStoredToken;
|
|
263
270
|
private scheduleTokenExpiry;
|
|
264
271
|
private markUnauthorized;
|
|
265
272
|
private setConnectionStatus;
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -3229,7 +3229,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
3229
3229
|
} });
|
|
3230
3230
|
}
|
|
3231
3231
|
}
|
|
3232
|
-
const version = "1.5.
|
|
3232
|
+
const version = "1.5.1";
|
|
3233
3233
|
class WebRtc {
|
|
3234
3234
|
constructor(api) {
|
|
3235
3235
|
__publicField(this, "ice");
|
|
@@ -3784,6 +3784,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
3784
3784
|
__publicField(this, "recoveryImmediateRetries", 2);
|
|
3785
3785
|
/** LocalStorage key for persisting logins */
|
|
3786
3786
|
__publicField(this, "localStorageKey", "datalynk-token");
|
|
3787
|
+
__publicField(this, "tokenStorageListener", null);
|
|
3787
3788
|
/** Pending requests cache */
|
|
3788
3789
|
__publicField(this, "pending", {});
|
|
3789
3790
|
/** Helpers */
|
|
@@ -3833,12 +3834,14 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
3833
3834
|
var _a, _b;
|
|
3834
3835
|
this.origin = origin;
|
|
3835
3836
|
this.url = `${new URL(origin).origin}/api/`;
|
|
3837
|
+
const development = this.isDevelopmentEnvironment(origin);
|
|
3836
3838
|
this.options = {
|
|
3837
3839
|
manifest: {},
|
|
3838
3840
|
name: typeof document != "undefined" ? document.title : "Datalynk",
|
|
3839
3841
|
offline: [],
|
|
3840
3842
|
origin: typeof location !== "undefined" ? location.host : "Unknown",
|
|
3841
3843
|
saveSession: true,
|
|
3844
|
+
watchTokenExpiry: true,
|
|
3842
3845
|
serviceWorker: "/service.worker.mjs",
|
|
3843
3846
|
...options,
|
|
3844
3847
|
webrtc: {
|
|
@@ -3848,14 +3851,28 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
3848
3851
|
...options.webrtc || {}
|
|
3849
3852
|
}
|
|
3850
3853
|
};
|
|
3854
|
+
if (development) this.options.watchTokenExpiry = false;
|
|
3851
3855
|
if (this.options.saveSession && typeof localStorage != "undefined") {
|
|
3852
3856
|
this.token = localStorage.getItem(this.localStorageKey) || null;
|
|
3853
3857
|
this.token$.pipe(distinctUntilChanged()).subscribe((token) => {
|
|
3854
3858
|
if (token) localStorage.setItem(this.localStorageKey, token);
|
|
3855
3859
|
else localStorage.removeItem(this.localStorageKey);
|
|
3856
3860
|
});
|
|
3861
|
+
if (typeof window != "undefined") {
|
|
3862
|
+
this.tokenStorageListener = (event) => {
|
|
3863
|
+
if (event.storageArea === localStorage && event.key == null) {
|
|
3864
|
+
this.token = null;
|
|
3865
|
+
return;
|
|
3866
|
+
}
|
|
3867
|
+
if (event.key !== this.localStorageKey || event.newValue === this.token) return;
|
|
3868
|
+
if (event.newValue && this.canAdoptToken(event.newValue, this.token)) this.token = event.newValue;
|
|
3869
|
+
else if (event.newValue == null) this.token = null;
|
|
3870
|
+
};
|
|
3871
|
+
window.addEventListener("storage", this.tokenStorageListener);
|
|
3872
|
+
}
|
|
3857
3873
|
}
|
|
3858
|
-
this.
|
|
3874
|
+
if (this.options.watchTokenExpiry)
|
|
3875
|
+
this.token$.pipe(distinctUntilChanged()).subscribe((token) => this.scheduleTokenExpiry(token));
|
|
3859
3876
|
this.socket = new Socket(this, { url: options.socket });
|
|
3860
3877
|
this.gps = new Gps(this, options.gps);
|
|
3861
3878
|
this.auth = new Auth(this);
|
|
@@ -3972,6 +3989,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
3972
3989
|
if (this.recovery && token !== this.recovery.token)
|
|
3973
3990
|
this.cancelRecovery(errorFromCode(401, "Session changed during API recovery"));
|
|
3974
3991
|
if (token && this.isTokenExpired(token)) {
|
|
3992
|
+
if (this.adoptStoredToken(token)) return;
|
|
3975
3993
|
this.authenticationInvalid = true;
|
|
3976
3994
|
this.token$.next(null);
|
|
3977
3995
|
this.setConnectionStatus("unauthorized");
|
|
@@ -3980,7 +3998,8 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
3980
3998
|
this.authenticationInvalid = false;
|
|
3981
3999
|
this.token$.next(token);
|
|
3982
4000
|
if (token && !this.online && !this.recovery) {
|
|
3983
|
-
|
|
4001
|
+
const browserOnline = typeof navigator == "undefined" || typeof navigator.onLine == "undefined" || navigator.onLine;
|
|
4002
|
+
this.setConnectionStatus(browserOnline ? "online" : "offline");
|
|
3984
4003
|
}
|
|
3985
4004
|
}
|
|
3986
4005
|
async _request(req, options = {}) {
|
|
@@ -4171,6 +4190,38 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
4171
4190
|
return true;
|
|
4172
4191
|
}
|
|
4173
4192
|
}
|
|
4193
|
+
isDevelopmentEnvironment(origin) {
|
|
4194
|
+
var _a;
|
|
4195
|
+
const isDevHost = (hostname) => {
|
|
4196
|
+
hostname = hostname.toLowerCase();
|
|
4197
|
+
return hostname === "localhost" || hostname === "127.0.0.1" || hostname === "[::1]" || hostname.endsWith(".datalynk") || hostname.endsWith(".test");
|
|
4198
|
+
};
|
|
4199
|
+
const configuredDev = typeof window != "undefined" && ((_a = window.dojoConfig) == null ? void 0 : _a.isDev) === true;
|
|
4200
|
+
const pageHost = typeof location == "undefined" ? "" : location.hostname;
|
|
4201
|
+
return configuredDev || isDevHost(new URL(origin).hostname) || !!pageHost && isDevHost(pageHost);
|
|
4202
|
+
}
|
|
4203
|
+
canAdoptToken(candidate, rejected) {
|
|
4204
|
+
if (!candidate || candidate === rejected || this.isTokenExpired(candidate)) return false;
|
|
4205
|
+
try {
|
|
4206
|
+
const next = decodeJwt(candidate);
|
|
4207
|
+
const previous = rejected ? decodeJwt(rejected) : null;
|
|
4208
|
+
if ((previous == null ? void 0 : previous.realm) && (next == null ? void 0 : next.realm) && previous.realm !== next.realm) return false;
|
|
4209
|
+
const previousUser = (previous == null ? void 0 : previous.uid) ?? (previous == null ? void 0 : previous.sub);
|
|
4210
|
+
const nextUser = (next == null ? void 0 : next.uid) ?? (next == null ? void 0 : next.sub);
|
|
4211
|
+
return previousUser == null || String(previousUser) === String(nextUser);
|
|
4212
|
+
} catch {
|
|
4213
|
+
return false;
|
|
4214
|
+
}
|
|
4215
|
+
}
|
|
4216
|
+
/** Adopt a newer canonical token written by another auth path before expiring this session. */
|
|
4217
|
+
adoptStoredToken(rejected) {
|
|
4218
|
+
var _a;
|
|
4219
|
+
if (!((_a = this.options) == null ? void 0 : _a.saveSession) || typeof localStorage == "undefined") return false;
|
|
4220
|
+
const stored = localStorage.getItem(this.localStorageKey);
|
|
4221
|
+
if (!stored || !this.canAdoptToken(stored, rejected)) return false;
|
|
4222
|
+
this.token = stored;
|
|
4223
|
+
return true;
|
|
4224
|
+
}
|
|
4174
4225
|
scheduleTokenExpiry(token) {
|
|
4175
4226
|
var _a, _b, _c;
|
|
4176
4227
|
if (this.tokenExpiryTimeout) clearTimeout(this.tokenExpiryTimeout);
|
|
@@ -4180,18 +4231,23 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
4180
4231
|
try {
|
|
4181
4232
|
expiresAt = (((_a = decodeJwt(token)) == null ? void 0 : _a.exp) ?? 0) * 1e3;
|
|
4182
4233
|
} catch {
|
|
4183
|
-
|
|
4234
|
+
if (!this.adoptStoredToken(token)) this.markUnauthorized(token);
|
|
4235
|
+
return;
|
|
4184
4236
|
}
|
|
4185
4237
|
const delay = expiresAt - Date.now();
|
|
4186
|
-
if (delay <= 0)
|
|
4238
|
+
if (delay <= 0) {
|
|
4239
|
+
if (!this.adoptStoredToken(token)) this.markUnauthorized(token);
|
|
4240
|
+
return;
|
|
4241
|
+
}
|
|
4187
4242
|
this.tokenExpiryTimeout = setTimeout(() => {
|
|
4188
4243
|
if (delay > 2147e6) this.scheduleTokenExpiry(token);
|
|
4189
|
-
else this.markUnauthorized(token);
|
|
4244
|
+
else if (!this.adoptStoredToken(token)) this.markUnauthorized(token);
|
|
4190
4245
|
}, Math.min(delay, 2147e6));
|
|
4191
4246
|
(_c = (_b = this.tokenExpiryTimeout) == null ? void 0 : _b.unref) == null ? void 0 : _c.call(_b);
|
|
4192
4247
|
}
|
|
4193
4248
|
markUnauthorized(token) {
|
|
4194
4249
|
if (token && token !== this.token) return;
|
|
4250
|
+
if (this.adoptStoredToken(token)) return;
|
|
4195
4251
|
this.authenticationInvalid = true;
|
|
4196
4252
|
this.cancelRecovery(errorFromCode(401, "Session expired"));
|
|
4197
4253
|
if (this.token != null) this.token$.next(null);
|
package/dist/index.mjs
CHANGED
|
@@ -3225,7 +3225,7 @@ class Superuser {
|
|
|
3225
3225
|
} });
|
|
3226
3226
|
}
|
|
3227
3227
|
}
|
|
3228
|
-
const version = "1.5.
|
|
3228
|
+
const version = "1.5.1";
|
|
3229
3229
|
class WebRtc {
|
|
3230
3230
|
constructor(api) {
|
|
3231
3231
|
__publicField(this, "ice");
|
|
@@ -3780,6 +3780,7 @@ const _Api = class _Api {
|
|
|
3780
3780
|
__publicField(this, "recoveryImmediateRetries", 2);
|
|
3781
3781
|
/** LocalStorage key for persisting logins */
|
|
3782
3782
|
__publicField(this, "localStorageKey", "datalynk-token");
|
|
3783
|
+
__publicField(this, "tokenStorageListener", null);
|
|
3783
3784
|
/** Pending requests cache */
|
|
3784
3785
|
__publicField(this, "pending", {});
|
|
3785
3786
|
/** Helpers */
|
|
@@ -3829,12 +3830,14 @@ const _Api = class _Api {
|
|
|
3829
3830
|
var _a, _b;
|
|
3830
3831
|
this.origin = origin;
|
|
3831
3832
|
this.url = `${new URL(origin).origin}/api/`;
|
|
3833
|
+
const development = this.isDevelopmentEnvironment(origin);
|
|
3832
3834
|
this.options = {
|
|
3833
3835
|
manifest: {},
|
|
3834
3836
|
name: typeof document != "undefined" ? document.title : "Datalynk",
|
|
3835
3837
|
offline: [],
|
|
3836
3838
|
origin: typeof location !== "undefined" ? location.host : "Unknown",
|
|
3837
3839
|
saveSession: true,
|
|
3840
|
+
watchTokenExpiry: true,
|
|
3838
3841
|
serviceWorker: "/service.worker.mjs",
|
|
3839
3842
|
...options,
|
|
3840
3843
|
webrtc: {
|
|
@@ -3844,14 +3847,28 @@ const _Api = class _Api {
|
|
|
3844
3847
|
...options.webrtc || {}
|
|
3845
3848
|
}
|
|
3846
3849
|
};
|
|
3850
|
+
if (development) this.options.watchTokenExpiry = false;
|
|
3847
3851
|
if (this.options.saveSession && typeof localStorage != "undefined") {
|
|
3848
3852
|
this.token = localStorage.getItem(this.localStorageKey) || null;
|
|
3849
3853
|
this.token$.pipe(distinctUntilChanged()).subscribe((token) => {
|
|
3850
3854
|
if (token) localStorage.setItem(this.localStorageKey, token);
|
|
3851
3855
|
else localStorage.removeItem(this.localStorageKey);
|
|
3852
3856
|
});
|
|
3857
|
+
if (typeof window != "undefined") {
|
|
3858
|
+
this.tokenStorageListener = (event) => {
|
|
3859
|
+
if (event.storageArea === localStorage && event.key == null) {
|
|
3860
|
+
this.token = null;
|
|
3861
|
+
return;
|
|
3862
|
+
}
|
|
3863
|
+
if (event.key !== this.localStorageKey || event.newValue === this.token) return;
|
|
3864
|
+
if (event.newValue && this.canAdoptToken(event.newValue, this.token)) this.token = event.newValue;
|
|
3865
|
+
else if (event.newValue == null) this.token = null;
|
|
3866
|
+
};
|
|
3867
|
+
window.addEventListener("storage", this.tokenStorageListener);
|
|
3868
|
+
}
|
|
3853
3869
|
}
|
|
3854
|
-
this.
|
|
3870
|
+
if (this.options.watchTokenExpiry)
|
|
3871
|
+
this.token$.pipe(distinctUntilChanged()).subscribe((token) => this.scheduleTokenExpiry(token));
|
|
3855
3872
|
this.socket = new Socket(this, { url: options.socket });
|
|
3856
3873
|
this.gps = new Gps(this, options.gps);
|
|
3857
3874
|
this.auth = new Auth(this);
|
|
@@ -3968,6 +3985,7 @@ const _Api = class _Api {
|
|
|
3968
3985
|
if (this.recovery && token !== this.recovery.token)
|
|
3969
3986
|
this.cancelRecovery(errorFromCode(401, "Session changed during API recovery"));
|
|
3970
3987
|
if (token && this.isTokenExpired(token)) {
|
|
3988
|
+
if (this.adoptStoredToken(token)) return;
|
|
3971
3989
|
this.authenticationInvalid = true;
|
|
3972
3990
|
this.token$.next(null);
|
|
3973
3991
|
this.setConnectionStatus("unauthorized");
|
|
@@ -3976,7 +3994,8 @@ const _Api = class _Api {
|
|
|
3976
3994
|
this.authenticationInvalid = false;
|
|
3977
3995
|
this.token$.next(token);
|
|
3978
3996
|
if (token && !this.online && !this.recovery) {
|
|
3979
|
-
|
|
3997
|
+
const browserOnline = typeof navigator == "undefined" || typeof navigator.onLine == "undefined" || navigator.onLine;
|
|
3998
|
+
this.setConnectionStatus(browserOnline ? "online" : "offline");
|
|
3980
3999
|
}
|
|
3981
4000
|
}
|
|
3982
4001
|
async _request(req, options = {}) {
|
|
@@ -4167,6 +4186,38 @@ const _Api = class _Api {
|
|
|
4167
4186
|
return true;
|
|
4168
4187
|
}
|
|
4169
4188
|
}
|
|
4189
|
+
isDevelopmentEnvironment(origin) {
|
|
4190
|
+
var _a;
|
|
4191
|
+
const isDevHost = (hostname) => {
|
|
4192
|
+
hostname = hostname.toLowerCase();
|
|
4193
|
+
return hostname === "localhost" || hostname === "127.0.0.1" || hostname === "[::1]" || hostname.endsWith(".datalynk") || hostname.endsWith(".test");
|
|
4194
|
+
};
|
|
4195
|
+
const configuredDev = typeof window != "undefined" && ((_a = window.dojoConfig) == null ? void 0 : _a.isDev) === true;
|
|
4196
|
+
const pageHost = typeof location == "undefined" ? "" : location.hostname;
|
|
4197
|
+
return configuredDev || isDevHost(new URL(origin).hostname) || !!pageHost && isDevHost(pageHost);
|
|
4198
|
+
}
|
|
4199
|
+
canAdoptToken(candidate, rejected) {
|
|
4200
|
+
if (!candidate || candidate === rejected || this.isTokenExpired(candidate)) return false;
|
|
4201
|
+
try {
|
|
4202
|
+
const next = decodeJwt(candidate);
|
|
4203
|
+
const previous = rejected ? decodeJwt(rejected) : null;
|
|
4204
|
+
if ((previous == null ? void 0 : previous.realm) && (next == null ? void 0 : next.realm) && previous.realm !== next.realm) return false;
|
|
4205
|
+
const previousUser = (previous == null ? void 0 : previous.uid) ?? (previous == null ? void 0 : previous.sub);
|
|
4206
|
+
const nextUser = (next == null ? void 0 : next.uid) ?? (next == null ? void 0 : next.sub);
|
|
4207
|
+
return previousUser == null || String(previousUser) === String(nextUser);
|
|
4208
|
+
} catch {
|
|
4209
|
+
return false;
|
|
4210
|
+
}
|
|
4211
|
+
}
|
|
4212
|
+
/** Adopt a newer canonical token written by another auth path before expiring this session. */
|
|
4213
|
+
adoptStoredToken(rejected) {
|
|
4214
|
+
var _a;
|
|
4215
|
+
if (!((_a = this.options) == null ? void 0 : _a.saveSession) || typeof localStorage == "undefined") return false;
|
|
4216
|
+
const stored = localStorage.getItem(this.localStorageKey);
|
|
4217
|
+
if (!stored || !this.canAdoptToken(stored, rejected)) return false;
|
|
4218
|
+
this.token = stored;
|
|
4219
|
+
return true;
|
|
4220
|
+
}
|
|
4170
4221
|
scheduleTokenExpiry(token) {
|
|
4171
4222
|
var _a, _b, _c;
|
|
4172
4223
|
if (this.tokenExpiryTimeout) clearTimeout(this.tokenExpiryTimeout);
|
|
@@ -4176,18 +4227,23 @@ const _Api = class _Api {
|
|
|
4176
4227
|
try {
|
|
4177
4228
|
expiresAt = (((_a = decodeJwt(token)) == null ? void 0 : _a.exp) ?? 0) * 1e3;
|
|
4178
4229
|
} catch {
|
|
4179
|
-
|
|
4230
|
+
if (!this.adoptStoredToken(token)) this.markUnauthorized(token);
|
|
4231
|
+
return;
|
|
4180
4232
|
}
|
|
4181
4233
|
const delay = expiresAt - Date.now();
|
|
4182
|
-
if (delay <= 0)
|
|
4234
|
+
if (delay <= 0) {
|
|
4235
|
+
if (!this.adoptStoredToken(token)) this.markUnauthorized(token);
|
|
4236
|
+
return;
|
|
4237
|
+
}
|
|
4183
4238
|
this.tokenExpiryTimeout = setTimeout(() => {
|
|
4184
4239
|
if (delay > 2147e6) this.scheduleTokenExpiry(token);
|
|
4185
|
-
else this.markUnauthorized(token);
|
|
4240
|
+
else if (!this.adoptStoredToken(token)) this.markUnauthorized(token);
|
|
4186
4241
|
}, Math.min(delay, 2147e6));
|
|
4187
4242
|
(_c = (_b = this.tokenExpiryTimeout) == null ? void 0 : _b.unref) == null ? void 0 : _c.call(_b);
|
|
4188
4243
|
}
|
|
4189
4244
|
markUnauthorized(token) {
|
|
4190
4245
|
if (token && token !== this.token) return;
|
|
4246
|
+
if (this.adoptStoredToken(token)) return;
|
|
4191
4247
|
this.authenticationInvalid = true;
|
|
4192
4248
|
this.cancelRecovery(errorFromCode(401, "Session expired"));
|
|
4193
4249
|
if (this.token != null) this.token$.next(null);
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@auxilium/datalynk-client",
|
|
3
3
|
"description": "Datalynk client library",
|
|
4
4
|
"repository": "https://gitlab.auxiliumgroup.com/auxilium/datalynk/datalynk-client",
|
|
5
|
-
"version": "1.5.
|
|
5
|
+
"version": "1.5.1",
|
|
6
6
|
"author": "Auxilium Group <devops@auxiliumgroup.com>",
|
|
7
7
|
"private": false,
|
|
8
8
|
"main": "./dist/index.cjs",
|