velocious 1.0.337 → 1.0.339
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/build/src/frontend-models/base.js +2 -2
- package/build/src/http-client/websocket-channel.d.ts +29 -4
- package/build/src/http-client/websocket-channel.d.ts.map +1 -1
- package/build/src/http-client/websocket-channel.js +66 -9
- package/build/src/http-client/websocket-client.d.ts +50 -9
- package/build/src/http-client/websocket-client.d.ts.map +1 -1
- package/build/src/http-client/websocket-client.js +139 -30
- package/package.json +2 -1
|
@@ -13,16 +13,18 @@ export default class VelociousWebsocketClientSubscription {
|
|
|
13
13
|
* @param {string} args.subscriptionId
|
|
14
14
|
* @param {string} args.channelType
|
|
15
15
|
* @param {Record<string, any>} [args.params]
|
|
16
|
+
* @param {string} [args.lastEventId]
|
|
16
17
|
* @param {(body: any) => void} [args.onMessage]
|
|
17
18
|
* @param {() => void} [args.onDisconnect]
|
|
18
19
|
* @param {() => void} [args.onResume]
|
|
19
20
|
* @param {(reason: string) => void} [args.onClose]
|
|
20
21
|
*/
|
|
21
|
-
constructor({ client, subscriptionId, channelType, params, onMessage, onDisconnect, onResume, onClose }: {
|
|
22
|
+
constructor({ client, subscriptionId, channelType, params, lastEventId, onMessage, onDisconnect, onResume, onClose }: {
|
|
22
23
|
client: import("./websocket-client.js").default;
|
|
23
24
|
subscriptionId: string;
|
|
24
25
|
channelType: string;
|
|
25
26
|
params?: Record<string, any> | undefined;
|
|
27
|
+
lastEventId?: string | undefined;
|
|
26
28
|
onMessage?: ((body: any) => void) | undefined;
|
|
27
29
|
onDisconnect?: (() => void) | undefined;
|
|
28
30
|
onResume?: (() => void) | undefined;
|
|
@@ -32,18 +34,32 @@ export default class VelociousWebsocketClientSubscription {
|
|
|
32
34
|
subscriptionId: string;
|
|
33
35
|
channelType: string;
|
|
34
36
|
params: Record<string, any>;
|
|
37
|
+
lastEventId: string | undefined;
|
|
35
38
|
_onMessage: ((body: any) => void) | undefined;
|
|
36
39
|
_onDisconnect: (() => void) | undefined;
|
|
37
40
|
_onResume: (() => void) | undefined;
|
|
38
41
|
_onClose: ((reason: string) => void) | undefined;
|
|
42
|
+
_ready: boolean;
|
|
43
|
+
_resumeReadyOnResume: boolean;
|
|
39
44
|
_subscribed: boolean;
|
|
45
|
+
_subscribeSent: boolean;
|
|
40
46
|
_closed: boolean;
|
|
47
|
+
/** @returns {Promise<void>} */
|
|
48
|
+
_ensureReadyPromise(): Promise<void>;
|
|
41
49
|
/** @type {Promise<void>} */
|
|
42
|
-
ready: Promise<void
|
|
43
|
-
_resolveReady: (value: void | PromiseLike<void>) => void;
|
|
44
|
-
_rejectReady: (reason?: any) => void;
|
|
50
|
+
ready: Promise<void> | undefined;
|
|
51
|
+
_resolveReady: ((value: void | PromiseLike<void>) => void) | null | undefined;
|
|
52
|
+
_rejectReady: ((reason?: any) => void) | null | undefined;
|
|
53
|
+
/** @returns {void} */
|
|
54
|
+
_resolveReadyState(): void;
|
|
55
|
+
/** @returns {void} */
|
|
56
|
+
_markNotReady(): void;
|
|
45
57
|
/** @returns {void} */
|
|
46
58
|
_handleSubscribed(): void;
|
|
59
|
+
/** @returns {void} */
|
|
60
|
+
_markSubscribeSent(): void;
|
|
61
|
+
/** @returns {boolean} */
|
|
62
|
+
_needsSubscribe(): boolean;
|
|
47
63
|
/**
|
|
48
64
|
* @param {any} body
|
|
49
65
|
* @returns {void}
|
|
@@ -58,11 +74,20 @@ export default class VelociousWebsocketClientSubscription {
|
|
|
58
74
|
* @returns {void}
|
|
59
75
|
*/
|
|
60
76
|
_handleClosed(reason: string): void;
|
|
77
|
+
/**
|
|
78
|
+
* @param {{timeoutMs?: number}} [params]
|
|
79
|
+
* @returns {Promise<void>}
|
|
80
|
+
*/
|
|
81
|
+
waitForReady({ timeoutMs }?: {
|
|
82
|
+
timeoutMs?: number;
|
|
83
|
+
}): Promise<void>;
|
|
61
84
|
/** @returns {void} */
|
|
62
85
|
close(): void;
|
|
63
86
|
/** @returns {boolean} */
|
|
64
87
|
isClosed(): boolean;
|
|
65
88
|
/** @returns {boolean} */
|
|
89
|
+
isReady(): boolean;
|
|
90
|
+
/** @returns {boolean} */
|
|
66
91
|
isSubscribed(): boolean;
|
|
67
92
|
}
|
|
68
93
|
//# sourceMappingURL=websocket-channel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-channel.d.ts","sourceRoot":"","sources":["../../../src/http-client/websocket-channel.js"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH;IACE
|
|
1
|
+
{"version":3,"file":"websocket-channel.d.ts","sourceRoot":"","sources":["../../../src/http-client/websocket-channel.js"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH;IACE;;;;;;;;;;;OAWG;IACH,sHAVG;QAAsD,MAAM,EAApD,OAAO,uBAAuB,EAAE,OAAO;QAC1B,cAAc,EAA3B,MAAM;QACO,WAAW,EAAxB,MAAM;QACqB,MAAM;QACnB,WAAW;QACE,SAAS,WAA7B,GAAG,KAAK,IAAI;QACD,YAAY,UAAxB,IAAI;QACQ,QAAQ,UAApB,IAAI;QACsB,OAAO,aAA9B,MAAM,KAAK,IAAI;KAAgB,EAmBlD;IAhBC,gDAAoB;IACpB,uBAAoC;IACpC,oBAA8B;IAC9B,4BAA0B;IAC1B,gCAA8B;IAC9B,oBAXgB,GAAG,KAAK,IAAI,cAWD;IAC3B,sBAXe,IAAI,cAWc;IACjC,kBAXe,IAAI,cAWM;IACzB,oBAXkB,MAAM,KAAK,IAAI,cAWV;IACvB,gBAAmB;IACnB,8BAAiC;IACjC,qBAAwB;IACxB,wBAA2B;IAC3B,iBAAoB;IAKtB,+BAA+B;IAC/B,uBADc,OAAO,CAAC,IAAI,CAAC,CAW1B;IARG,4BAA4B;IAC5B,iCAGE;IAFA,8EAA4B;IAC5B,0DAA0B;IAOhC,sBAAsB;IACtB,sBADc,IAAI,CAMjB;IAED,sBAAsB;IACtB,iBADc,IAAI,CAGjB;IAED,sBAAsB;IACtB,qBADc,IAAI,CAKjB;IAED,sBAAsB;IACtB,sBADc,IAAI,CAGjB;IAED,yBAAyB;IACzB,mBADc,OAAO,CAGpB;IAED;;;OAGG;IACH,qBAHW,GAAG,GACD,IAAI,CAKhB;IAED,sBAAsB;IACtB,uBADc,IAAI,CAOjB;IAED,sBAAsB;IACtB,kBADc,IAAI,CASjB;IAED;;;OAGG;IACH,sBAHW,MAAM,GACJ,IAAI,CAiBhB;IAED;;;OAGG;IACH,6BAHW;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAC,GAClB,OAAO,CAAC,IAAI,CAAC,CAWzB;IAED,sBAAsB;IACtB,SADc,IAAI,CAcjB;IAED,yBAAyB;IACzB,YADc,OAAO,CACa;IAElC,yBAAyB;IACzB,WADc,OAAO,CACW;IAEhC,yBAAyB;IACzB,gBADc,OAAO,CACsC;CAC5D"}
|
|
@@ -14,34 +14,65 @@ export default class VelociousWebsocketClientSubscription {
|
|
|
14
14
|
* @param {string} args.subscriptionId
|
|
15
15
|
* @param {string} args.channelType
|
|
16
16
|
* @param {Record<string, any>} [args.params]
|
|
17
|
+
* @param {string} [args.lastEventId]
|
|
17
18
|
* @param {(body: any) => void} [args.onMessage]
|
|
18
19
|
* @param {() => void} [args.onDisconnect]
|
|
19
20
|
* @param {() => void} [args.onResume]
|
|
20
21
|
* @param {(reason: string) => void} [args.onClose]
|
|
21
22
|
*/
|
|
22
|
-
constructor({ client, subscriptionId, channelType, params, onMessage, onDisconnect, onResume, onClose }) {
|
|
23
|
+
constructor({ client, subscriptionId, channelType, params, lastEventId, onMessage, onDisconnect, onResume, onClose }) {
|
|
23
24
|
this.client = client;
|
|
24
25
|
this.subscriptionId = subscriptionId;
|
|
25
26
|
this.channelType = channelType;
|
|
26
27
|
this.params = params || {};
|
|
28
|
+
this.lastEventId = lastEventId;
|
|
27
29
|
this._onMessage = onMessage;
|
|
28
30
|
this._onDisconnect = onDisconnect;
|
|
29
31
|
this._onResume = onResume;
|
|
30
32
|
this._onClose = onClose;
|
|
33
|
+
this._ready = false;
|
|
34
|
+
this._resumeReadyOnResume = false;
|
|
31
35
|
this._subscribed = false;
|
|
36
|
+
this._subscribeSent = false;
|
|
32
37
|
this._closed = false;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
+
this._ensureReadyPromise();
|
|
39
|
+
}
|
|
40
|
+
/** @returns {Promise<void>} */
|
|
41
|
+
_ensureReadyPromise() {
|
|
42
|
+
if (!this.ready || !this._resolveReady || !this._rejectReady) {
|
|
43
|
+
/** @type {Promise<void>} */
|
|
44
|
+
this.ready = new Promise((resolve, reject) => {
|
|
45
|
+
this._resolveReady = resolve;
|
|
46
|
+
this._rejectReady = reject;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return this.ready;
|
|
50
|
+
}
|
|
51
|
+
/** @returns {void} */
|
|
52
|
+
_resolveReadyState() {
|
|
53
|
+
this._ready = true;
|
|
54
|
+
this._resolveReady?.();
|
|
55
|
+
this._resolveReady = null;
|
|
56
|
+
this._rejectReady = null;
|
|
57
|
+
}
|
|
58
|
+
/** @returns {void} */
|
|
59
|
+
_markNotReady() {
|
|
60
|
+
this._ready = false;
|
|
38
61
|
}
|
|
39
62
|
/** @returns {void} */
|
|
40
63
|
_handleSubscribed() {
|
|
41
64
|
if (this._closed || this._subscribed)
|
|
42
65
|
return;
|
|
43
66
|
this._subscribed = true;
|
|
44
|
-
this.
|
|
67
|
+
this._resolveReadyState();
|
|
68
|
+
}
|
|
69
|
+
/** @returns {void} */
|
|
70
|
+
_markSubscribeSent() {
|
|
71
|
+
this._subscribeSent = true;
|
|
72
|
+
}
|
|
73
|
+
/** @returns {boolean} */
|
|
74
|
+
_needsSubscribe() {
|
|
75
|
+
return !this._closed && !this._subscribeSent;
|
|
45
76
|
}
|
|
46
77
|
/**
|
|
47
78
|
* @param {any} body
|
|
@@ -56,12 +87,20 @@ export default class VelociousWebsocketClientSubscription {
|
|
|
56
87
|
_handleDisconnected() {
|
|
57
88
|
if (this._closed)
|
|
58
89
|
return;
|
|
90
|
+
this._resumeReadyOnResume ||= this._subscribed;
|
|
91
|
+
this._subscribed = false;
|
|
92
|
+
this._markNotReady();
|
|
59
93
|
this._onDisconnect?.();
|
|
60
94
|
}
|
|
61
95
|
/** @returns {void} */
|
|
62
96
|
_handleResumed() {
|
|
63
97
|
if (this._closed)
|
|
64
98
|
return;
|
|
99
|
+
if (this._resumeReadyOnResume) {
|
|
100
|
+
this._subscribed = true;
|
|
101
|
+
this._resolveReadyState();
|
|
102
|
+
}
|
|
103
|
+
this._resumeReadyOnResume = false;
|
|
65
104
|
this._onResume?.();
|
|
66
105
|
}
|
|
67
106
|
/**
|
|
@@ -76,11 +115,27 @@ export default class VelociousWebsocketClientSubscription {
|
|
|
76
115
|
this._onClose?.(reason);
|
|
77
116
|
}
|
|
78
117
|
finally {
|
|
79
|
-
|
|
118
|
+
this._resumeReadyOnResume = false;
|
|
119
|
+
if (!this._ready) {
|
|
80
120
|
this._rejectReady?.(new Error(`Subscription closed before acknowledgement: ${reason}`));
|
|
81
121
|
}
|
|
122
|
+
this._resolveReady = null;
|
|
123
|
+
this._rejectReady = null;
|
|
82
124
|
}
|
|
83
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* @param {{timeoutMs?: number}} [params]
|
|
128
|
+
* @returns {Promise<void>}
|
|
129
|
+
*/
|
|
130
|
+
async waitForReady({ timeoutMs = 5000 } = {}) {
|
|
131
|
+
if (this._ready)
|
|
132
|
+
return;
|
|
133
|
+
const readyPromise = this._ensureReadyPromise();
|
|
134
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
135
|
+
setTimeout(() => reject(new Error(`Subscription not ready after ${timeoutMs}ms`)), timeoutMs);
|
|
136
|
+
});
|
|
137
|
+
await Promise.race([readyPromise, timeoutPromise]);
|
|
138
|
+
}
|
|
84
139
|
/** @returns {void} */
|
|
85
140
|
close() {
|
|
86
141
|
if (this._closed)
|
|
@@ -99,6 +154,8 @@ export default class VelociousWebsocketClientSubscription {
|
|
|
99
154
|
/** @returns {boolean} */
|
|
100
155
|
isClosed() { return this._closed; }
|
|
101
156
|
/** @returns {boolean} */
|
|
157
|
+
isReady() { return this._ready; }
|
|
158
|
+
/** @returns {boolean} */
|
|
102
159
|
isSubscribed() { return this._subscribed && !this._closed; }
|
|
103
160
|
}
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWNoYW5uZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaHR0cC1jbGllbnQvd2Vic29ja2V0LWNoYW5uZWwuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLG9DQUFvQztJQUN2RDs7Ozs7Ozs7OztPQVVHO0lBQ0gsWUFBWSxFQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUM7UUFDbkcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7UUFDcEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUE7UUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7UUFDOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFBO1FBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFBO1FBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFBO1FBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFBO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFBO1FBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO1FBRXBCLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzNDLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFBO1lBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFBO1FBQzVCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELHNCQUFzQjtJQUN0QixpQkFBaUI7UUFDZixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFNO1FBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFBO0lBQ3hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjLENBQUMsSUFBSTtRQUNqQixJQUFJLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTTtRQUN4QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDekIsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixtQkFBbUI7UUFDakIsSUFBSSxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU07UUFDeEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUE7SUFDeEIsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixjQUFjO1FBQ1osSUFBSSxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU07UUFDeEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUE7SUFDcEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGFBQWEsQ0FBQyxNQUFNO1FBQ2xCLElBQUksSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFNO1FBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFBO1FBRW5CLElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN6QixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsK0NBQStDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQTtZQUN6RixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsS0FBSztRQUNILElBQUksSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFNO1FBRXhCLElBQUksQ0FBQztZQUNILElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBQyxDQUFDLENBQUE7WUFDOUYsQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxpRUFBaUU7UUFDbkUsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQzNELElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtJQUMxQyxDQUFDO0lBRUQseUJBQXlCO0lBQ3pCLFFBQVEsS0FBSyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUEsQ0FBQyxDQUFDO0lBRWxDLHlCQUF5QjtJQUN6QixZQUFZLEtBQUssT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQSxDQUFDLENBQUM7Q0FDNUQiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqXG4gKiBDbGllbnQtc2lkZSBoYW5kbGUgZm9yIGEgY2hhbm5lbCBzdWJzY3JpcHRpb24gb3BlbmVkIHZpYVxuICogYFZlbG9jaW91c1dlYnNvY2tldENsaWVudC5zdWJzY3JpYmVDaGFubmVsKClgLiBNaXJyb3JzIHRoZSBzZXJ2ZXInc1xuICogc3Vic2NyaXB0aW9uIGxpZmVjeWNsZSDigJQgYHN1YnNjcmliZWRgIChyZXNvbHZlcyBgcmVhZHlgKSAvIGBvbk1lc3NhZ2VgIC9cbiAqIGBvbkNsb3NlYC5cbiAqXG4gKiBTZWUgYGRvY3Mvd2Vic29ja2V0LWNoYW5uZWxzLm1kYCBmb3IgdGhlIHdpcmUgcHJvdG9jb2wuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c1dlYnNvY2tldENsaWVudFN1YnNjcmlwdGlvbiB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vd2Vic29ja2V0LWNsaWVudC5qc1wiKS5kZWZhdWx0fSBhcmdzLmNsaWVudFxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5zdWJzY3JpcHRpb25JZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jaGFubmVsVHlwZVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IFthcmdzLnBhcmFtc11cbiAgICogQHBhcmFtIHsoYm9keTogYW55KSA9PiB2b2lkfSBbYXJncy5vbk1lc3NhZ2VdXG4gICAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gW2FyZ3Mub25EaXNjb25uZWN0XVxuICAgKiBAcGFyYW0geygpID0+IHZvaWR9IFthcmdzLm9uUmVzdW1lXVxuICAgKiBAcGFyYW0geyhyZWFzb246IHN0cmluZykgPT4gdm9pZH0gW2FyZ3Mub25DbG9zZV1cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjbGllbnQsIHN1YnNjcmlwdGlvbklkLCBjaGFubmVsVHlwZSwgcGFyYW1zLCBvbk1lc3NhZ2UsIG9uRGlzY29ubmVjdCwgb25SZXN1bWUsIG9uQ2xvc2V9KSB7XG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnRcbiAgICB0aGlzLnN1YnNjcmlwdGlvbklkID0gc3Vic2NyaXB0aW9uSWRcbiAgICB0aGlzLmNoYW5uZWxUeXBlID0gY2hhbm5lbFR5cGVcbiAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcyB8fCB7fVxuICAgIHRoaXMuX29uTWVzc2FnZSA9IG9uTWVzc2FnZVxuICAgIHRoaXMuX29uRGlzY29ubmVjdCA9IG9uRGlzY29ubmVjdFxuICAgIHRoaXMuX29uUmVzdW1lID0gb25SZXN1bWVcbiAgICB0aGlzLl9vbkNsb3NlID0gb25DbG9zZVxuICAgIHRoaXMuX3N1YnNjcmliZWQgPSBmYWxzZVxuICAgIHRoaXMuX2Nsb3NlZCA9IGZhbHNlXG5cbiAgICAvKiogQHR5cGUge1Byb21pc2U8dm9pZD59ICovXG4gICAgdGhpcy5yZWFkeSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX3Jlc29sdmVSZWFkeSA9IHJlc29sdmVcbiAgICAgIHRoaXMuX3JlamVjdFJlYWR5ID0gcmVqZWN0XG4gICAgfSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgX2hhbmRsZVN1YnNjcmliZWQoKSB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCB8fCB0aGlzLl9zdWJzY3JpYmVkKSByZXR1cm5cbiAgICB0aGlzLl9zdWJzY3JpYmVkID0gdHJ1ZVxuICAgIHRoaXMuX3Jlc29sdmVSZWFkeT8uKClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gYm9keVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIF9oYW5kbGVNZXNzYWdlKGJvZHkpIHtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSByZXR1cm5cbiAgICB0aGlzLl9vbk1lc3NhZ2U/Lihib2R5KVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBfaGFuZGxlRGlzY29ubmVjdGVkKCkge1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHJldHVyblxuICAgIHRoaXMuX29uRGlzY29ubmVjdD8uKClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgX2hhbmRsZVJlc3VtZWQoKSB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkgcmV0dXJuXG4gICAgdGhpcy5fb25SZXN1bWU/LigpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvblxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIF9oYW5kbGVDbG9zZWQocmVhc29uKSB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkgcmV0dXJuXG4gICAgdGhpcy5fY2xvc2VkID0gdHJ1ZVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX29uQ2xvc2U/LihyZWFzb24pXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICghdGhpcy5fc3Vic2NyaWJlZCkge1xuICAgICAgICB0aGlzLl9yZWplY3RSZWFkeT8uKG5ldyBFcnJvcihgU3Vic2NyaXB0aW9uIGNsb3NlZCBiZWZvcmUgYWNrbm93bGVkZ2VtZW50OiAke3JlYXNvbn1gKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHJldHVyblxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmNsaWVudC5pc09wZW4oKSkge1xuICAgICAgICB0aGlzLmNsaWVudC5fc2VuZE1lc3NhZ2Uoe3R5cGU6IFwiY2hhbm5lbC11bnN1YnNjcmliZVwiLCBzdWJzY3JpcHRpb25JZDogdGhpcy5zdWJzY3JpcHRpb25JZH0pXG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBTb2NrZXQgYWxyZWFkeSBnb25lOyBzZXJ2ZXIgd2lsbCBjbGVhbiB1cCBvbiBzZXNzaW9uIHRlYXJkb3duLlxuICAgIH1cblxuICAgIHRoaXMuY2xpZW50Ll9yZW1vdmVDaGFubmVsU3Vic2NyaXB0aW9uKHRoaXMuc3Vic2NyaXB0aW9uSWQpXG4gICAgdGhpcy5faGFuZGxlQ2xvc2VkKFwiY2xpZW50X3Vuc3Vic2NyaWJlXCIpXG4gIH1cblxuICAvKiogQHJldHVybnMge2Jvb2xlYW59ICovXG4gIGlzQ2xvc2VkKCkgeyByZXR1cm4gdGhpcy5fY2xvc2VkIH1cblxuICAvKiogQHJldHVybnMge2Jvb2xlYW59ICovXG4gIGlzU3Vic2NyaWJlZCgpIHsgcmV0dXJuIHRoaXMuX3N1YnNjcmliZWQgJiYgIXRoaXMuX2Nsb3NlZCB9XG59XG4iXX0=
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWNoYW5uZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaHR0cC1jbGllbnQvd2Vic29ja2V0LWNoYW5uZWwuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLG9DQUFvQztJQUN2RDs7Ozs7Ozs7Ozs7T0FXRztJQUNILFlBQVksRUFBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBQztRQUNoSCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQTtRQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQTtRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUE7UUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7UUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUE7UUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUE7UUFDakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUE7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUE7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7UUFDbkIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQTtRQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQTtRQUN4QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQTtRQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtRQUVwQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtJQUM1QixDQUFDO0lBRUQsK0JBQStCO0lB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MEIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDM0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO0lBQzFDLENBQUM7SUFFRCx5QkFBeUI7SUFDekIsUUFBUSxLQUFLLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQSxDQUFDLENBQUM7SUFFbEMseUJBQXlCO0lBQ3pCLE9BQU8sS0FBSyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUEsQ0FBQyxDQUFDO0lBRWhDLHlCQUF5QjtJQUN6QixZQUFZLEtBQUssT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQSxDQUFDLENBQUM7Q0FDNUQiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqXG4gKiBDbGllbnQtc2lkZSBoYW5kbGUgZm9yIGEgY2hhbm5lbCBzdWJzY3JpcHRpb24gb3BlbmVkIHZpYVxuICogYFZlbG9jaW91c1dlYnNvY2tldENsaWVudC5zdWJzY3JpYmVDaGFubmVsKClgLiBNaXJyb3JzIHRoZSBzZXJ2ZXInc1xuICogc3Vic2NyaXB0aW9uIGxpZmVjeWNsZSDigJQgYHN1YnNjcmliZWRgIChyZXNvbHZlcyBgcmVhZHlgKSAvIGBvbk1lc3NhZ2VgIC9cbiAqIGBvbkNsb3NlYC5cbiAqXG4gKiBTZWUgYGRvY3Mvd2Vic29ja2V0LWNoYW5uZWxzLm1kYCBmb3IgdGhlIHdpcmUgcHJvdG9jb2wuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c1dlYnNvY2tldENsaWVudFN1YnNjcmlwdGlvbiB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vd2Vic29ja2V0LWNsaWVudC5qc1wiKS5kZWZhdWx0fSBhcmdzLmNsaWVudFxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5zdWJzY3JpcHRpb25JZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jaGFubmVsVHlwZVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IFthcmdzLnBhcmFtc11cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmxhc3RFdmVudElkXVxuICAgKiBAcGFyYW0geyhib2R5OiBhbnkpID0+IHZvaWR9IFthcmdzLm9uTWVzc2FnZV1cbiAgICogQHBhcmFtIHsoKSA9PiB2b2lkfSBbYXJncy5vbkRpc2Nvbm5lY3RdXG4gICAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gW2FyZ3Mub25SZXN1bWVdXG4gICAqIEBwYXJhbSB7KHJlYXNvbjogc3RyaW5nKSA9PiB2b2lkfSBbYXJncy5vbkNsb3NlXVxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NsaWVudCwgc3Vic2NyaXB0aW9uSWQsIGNoYW5uZWxUeXBlLCBwYXJhbXMsIGxhc3RFdmVudElkLCBvbk1lc3NhZ2UsIG9uRGlzY29ubmVjdCwgb25SZXN1bWUsIG9uQ2xvc2V9KSB7XG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnRcbiAgICB0aGlzLnN1YnNjcmlwdGlvbklkID0gc3Vic2NyaXB0aW9uSWRcbiAgICB0aGlzLmNoYW5uZWxUeXBlID0gY2hhbm5lbFR5cGVcbiAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcyB8fCB7fVxuICAgIHRoaXMubGFzdEV2ZW50SWQgPSBsYXN0RXZlbnRJZFxuICAgIHRoaXMuX29uTWVzc2FnZSA9IG9uTWVzc2FnZVxuICAgIHRoaXMuX29uRGlzY29ubmVjdCA9IG9uRGlzY29ubmVjdFxuICAgIHRoaXMuX29uUmVzdW1lID0gb25SZXN1bWVcbiAgICB0aGlzLl9vbkNsb3NlID0gb25DbG9zZVxuICAgIHRoaXMuX3JlYWR5ID0gZmFsc2VcbiAgICB0aGlzLl9yZXN1bWVSZWFkeU9uUmVzdW1lID0gZmFsc2VcbiAgICB0aGlzLl9zdWJzY3JpYmVkID0gZmFsc2VcbiAgICB0aGlzLl9zdWJzY3JpYmVTZW50ID0gZmFsc2VcbiAgICB0aGlzLl9jbG9zZWQgPSBmYWxzZVxuXG4gICAgdGhpcy5fZW5zdXJlUmVhZHlQcm9taXNlKClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gKi9cbiAgX2Vuc3VyZVJlYWR5UHJvbWlzZSgpIHtcbiAgICBpZiAoIXRoaXMucmVhZHkgfHwgIXRoaXMuX3Jlc29sdmVSZWFkeSB8fCAhdGhpcy5fcmVqZWN0UmVhZHkpIHtcbiAgICAgIC8qKiBAdHlwZSB7UHJvbWlzZTx2b2lkPn0gKi9cbiAgICAgIHRoaXMucmVhZHkgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRoaXMuX3Jlc29sdmVSZWFkeSA9IHJlc29sdmVcbiAgICAgICAgdGhpcy5fcmVqZWN0UmVhZHkgPSByZWplY3RcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVhZHlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgX3Jlc29sdmVSZWFkeVN0YXRlKCkge1xuICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZVxuICAgIHRoaXMuX3Jlc29sdmVSZWFkeT8uKClcbiAgICB0aGlzLl9yZXNvbHZlUmVhZHkgPSBudWxsXG4gICAgdGhpcy5fcmVqZWN0UmVhZHkgPSBudWxsXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIF9tYXJrTm90UmVhZHkoKSB7XG4gICAgdGhpcy5fcmVhZHkgPSBmYWxzZVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBfaGFuZGxlU3Vic2NyaWJlZCgpIHtcbiAgICBpZiAodGhpcy5fY2xvc2VkIHx8IHRoaXMuX3N1YnNjcmliZWQpIHJldHVyblxuICAgIHRoaXMuX3N1YnNjcmliZWQgPSB0cnVlXG4gICAgdGhpcy5fcmVzb2x2ZVJlYWR5U3RhdGUoKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBfbWFya1N1YnNjcmliZVNlbnQoKSB7XG4gICAgdGhpcy5fc3Vic2NyaWJlU2VudCA9IHRydWVcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gKi9cbiAgX25lZWRzU3Vic2NyaWJlKCkge1xuICAgIHJldHVybiAhdGhpcy5fY2xvc2VkICYmICF0aGlzLl9zdWJzY3JpYmVTZW50XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHthbnl9IGJvZHlcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBfaGFuZGxlTWVzc2FnZShib2R5KSB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkgcmV0dXJuXG4gICAgdGhpcy5fb25NZXNzYWdlPy4oYm9keSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgX2hhbmRsZURpc2Nvbm5lY3RlZCgpIHtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSByZXR1cm5cbiAgICB0aGlzLl9yZXN1bWVSZWFkeU9uUmVzdW1lIHx8PSB0aGlzLl9zdWJzY3JpYmVkXG4gICAgdGhpcy5fc3Vic2NyaWJlZCA9IGZhbHNlXG4gICAgdGhpcy5fbWFya05vdFJlYWR5KClcbiAgICB0aGlzLl9vbkRpc2Nvbm5lY3Q/LigpXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIF9oYW5kbGVSZXN1bWVkKCkge1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHJldHVyblxuICAgIGlmICh0aGlzLl9yZXN1bWVSZWFkeU9uUmVzdW1lKSB7XG4gICAgICB0aGlzLl9zdWJzY3JpYmVkID0gdHJ1ZVxuICAgICAgdGhpcy5fcmVzb2x2ZVJlYWR5U3RhdGUoKVxuICAgIH1cbiAgICB0aGlzLl9yZXN1bWVSZWFkeU9uUmVzdW1lID0gZmFsc2VcbiAgICB0aGlzLl9vblJlc3VtZT8uKClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgX2hhbmRsZUNsb3NlZChyZWFzb24pIHtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSByZXR1cm5cbiAgICB0aGlzLl9jbG9zZWQgPSB0cnVlXG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5fb25DbG9zZT8uKHJlYXNvbilcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fcmVzdW1lUmVhZHlPblJlc3VtZSA9IGZhbHNlXG4gICAgICBpZiAoIXRoaXMuX3JlYWR5KSB7XG4gICAgICAgIHRoaXMuX3JlamVjdFJlYWR5Py4obmV3IEVycm9yKGBTdWJzY3JpcHRpb24gY2xvc2VkIGJlZm9yZSBhY2tub3dsZWRnZW1lbnQ6ICR7cmVhc29ufWApKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZXNvbHZlUmVhZHkgPSBudWxsXG4gICAgICB0aGlzLl9yZWplY3RSZWFkeSA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7dGltZW91dE1zPzogbnVtYmVyfX0gW3BhcmFtc11cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyB3YWl0Rm9yUmVhZHkoe3RpbWVvdXRNcyA9IDUwMDB9ID0ge30pIHtcbiAgICBpZiAodGhpcy5fcmVhZHkpIHJldHVyblxuXG4gICAgY29uc3QgcmVhZHlQcm9taXNlID0gdGhpcy5fZW5zdXJlUmVhZHlQcm9taXNlKClcbiAgICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgU3Vic2NyaXB0aW9uIG5vdCByZWFkeSBhZnRlciAke3RpbWVvdXRNc31tc2ApKSwgdGltZW91dE1zKVxuICAgIH0pXG5cbiAgICBhd2FpdCBQcm9taXNlLnJhY2UoW3JlYWR5UHJvbWlzZSwgdGltZW91dFByb21pc2VdKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBjbG9zZSgpIHtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSByZXR1cm5cblxuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5jbGllbnQuaXNPcGVuKCkpIHtcbiAgICAgICAgdGhpcy5jbGllbnQuX3NlbmRNZXNzYWdlKHt0eXBlOiBcImNoYW5uZWwtdW5zdWJzY3JpYmVcIiwgc3Vic2NyaXB0aW9uSWQ6IHRoaXMuc3Vic2NyaXB0aW9uSWR9KVxuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gU29ja2V0IGFscmVhZHkgZ29uZTsgc2VydmVyIHdpbGwgY2xlYW4gdXAgb24gc2Vzc2lvbiB0ZWFyZG93bi5cbiAgICB9XG5cbiAgICB0aGlzLmNsaWVudC5fcmVtb3ZlQ2hhbm5lbFN1YnNjcmlwdGlvbih0aGlzLnN1YnNjcmlwdGlvbklkKVxuICAgIHRoaXMuX2hhbmRsZUNsb3NlZChcImNsaWVudF91bnN1YnNjcmliZVwiKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSAqL1xuICBpc0Nsb3NlZCgpIHsgcmV0dXJuIHRoaXMuX2Nsb3NlZCB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSAqL1xuICBpc1JlYWR5KCkgeyByZXR1cm4gdGhpcy5fcmVhZHkgfVxuXG4gIC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gKi9cbiAgaXNTdWJzY3JpYmVkKCkgeyByZXR1cm4gdGhpcy5fc3Vic2NyaWJlZCAmJiAhdGhpcy5fY2xvc2VkIH1cbn1cbiJdfQ==
|
|
@@ -7,13 +7,20 @@ export default class VelociousWebsocketClient {
|
|
|
7
7
|
* @param {object} [args] - Options object.
|
|
8
8
|
* @param {boolean} [args.autoReconnect] - Enable auto-reconnect with exponential backoff.
|
|
9
9
|
* @param {boolean} [args.debug] - Whether debug.
|
|
10
|
+
* @param {{getIsOnline?: () => boolean | Promise<boolean>, subscribe?: (callback: (isOnline: boolean) => void) => (() => void) | {remove: () => void}}} [args.networkMonitor] - Optional online-state adapter. When provided, auto-reconnect can wait for the network to report online before reconnecting, and open sockets are closed when the monitor reports offline.
|
|
10
11
|
* @param {number[]} [args.reconnectDelays] - Backoff delays in ms (default: [1000, 2000, 4000, 8000, 15000]).
|
|
11
12
|
* @param {{get: () => string | null | undefined | Promise<string | null | undefined>, set: (sessionId: string) => void | Promise<void>, clear: () => void | Promise<void>}} [args.sessionStore] - Optional sessionId persistence hook. When provided, the client writes every `session-established` / `session-resumed` id via `store.set(id)` and clears it on `session-gone`. Before the first `connect()`, the client reads any persisted id via `store.get()` and attempts resumption. Apps should back this by whatever persistence layer survives page reloads (localStorage, a cookie, SQLite, etc.).
|
|
12
13
|
* @param {string} [args.url] Full websocket URL (default: ws://127.0.0.1:3006/websocket)
|
|
13
14
|
*/
|
|
14
|
-
constructor({ autoReconnect, debug, reconnectDelays, sessionStore, url }?: {
|
|
15
|
+
constructor({ autoReconnect, debug, networkMonitor, reconnectDelays, sessionStore, url }?: {
|
|
15
16
|
autoReconnect?: boolean | undefined;
|
|
16
17
|
debug?: boolean | undefined;
|
|
18
|
+
networkMonitor?: {
|
|
19
|
+
getIsOnline?: () => boolean | Promise<boolean>;
|
|
20
|
+
subscribe?: (callback: (isOnline: boolean) => void) => (() => void) | {
|
|
21
|
+
remove: () => void;
|
|
22
|
+
};
|
|
23
|
+
} | undefined;
|
|
17
24
|
reconnectDelays?: number[] | undefined;
|
|
18
25
|
sessionStore?: {
|
|
19
26
|
get: () => string | null | undefined | Promise<string | null | undefined>;
|
|
@@ -46,6 +53,8 @@ export default class VelociousWebsocketClient {
|
|
|
46
53
|
disconnectedSince: number | null;
|
|
47
54
|
/** @type {number} */
|
|
48
55
|
reconnectAttempt: number;
|
|
56
|
+
/** @type {number} */
|
|
57
|
+
connectionAttempts: number;
|
|
49
58
|
/** @type {number[]} */
|
|
50
59
|
reconnectDelays: number[];
|
|
51
60
|
/** @type {ReturnType<typeof setTimeout> | null} */
|
|
@@ -74,6 +83,19 @@ export default class VelociousWebsocketClient {
|
|
|
74
83
|
} | undefined;
|
|
75
84
|
/** @type {boolean} - true once the sessionStore has been consulted for a restored id. */
|
|
76
85
|
_sessionStoreRestored: boolean;
|
|
86
|
+
/** @type {{getIsOnline?: () => boolean | Promise<boolean>, subscribe?: (callback: (isOnline: boolean) => void) => (() => void) | {remove: () => void}} | undefined} */
|
|
87
|
+
_networkMonitor: {
|
|
88
|
+
getIsOnline?: () => boolean | Promise<boolean>;
|
|
89
|
+
subscribe?: (callback: (isOnline: boolean) => void) => (() => void) | {
|
|
90
|
+
remove: () => void;
|
|
91
|
+
};
|
|
92
|
+
} | undefined;
|
|
93
|
+
/** @type {null | (() => void) | {remove: () => void}} */
|
|
94
|
+
_networkMonitorSubscription: null | (() => void) | {
|
|
95
|
+
remove: () => void;
|
|
96
|
+
};
|
|
97
|
+
/** @type {boolean} */
|
|
98
|
+
_waitingForOnline: boolean;
|
|
77
99
|
/** @returns {boolean} */
|
|
78
100
|
isOpen(): boolean;
|
|
79
101
|
/**
|
|
@@ -103,8 +125,9 @@ export default class VelociousWebsocketClient {
|
|
|
103
125
|
*/
|
|
104
126
|
_removeConnection(connectionId: string): void;
|
|
105
127
|
/**
|
|
106
|
-
* Subscribes to a named WebsocketChannel.
|
|
107
|
-
*
|
|
128
|
+
* Subscribes to a named WebsocketChannel. If the socket is not yet
|
|
129
|
+
* open, the subscription is queued and sent once a connection is
|
|
130
|
+
* established.
|
|
108
131
|
*
|
|
109
132
|
* @param {string} channelType - Name the server registered the channel under.
|
|
110
133
|
* @param {{params?: Record<string, any>, lastEventId?: string, onMessage?: (body: any) => void, onDisconnect?: () => void, onResume?: () => void, onClose?: (reason: string) => void}} [options]
|
|
@@ -123,6 +146,21 @@ export default class VelociousWebsocketClient {
|
|
|
123
146
|
* @returns {void}
|
|
124
147
|
*/
|
|
125
148
|
_removeChannelSubscription(subscriptionId: string): void;
|
|
149
|
+
/**
|
|
150
|
+
* @param {VelociousWebsocketClientSubscription} subscription
|
|
151
|
+
* @returns {void}
|
|
152
|
+
*/
|
|
153
|
+
_sendChannelSubscribe(subscription: VelociousWebsocketClientSubscription): void;
|
|
154
|
+
/** @returns {void} */
|
|
155
|
+
_sendPendingChannelSubscriptions(): void;
|
|
156
|
+
/** @returns {Promise<boolean>} */
|
|
157
|
+
_isOnline(): Promise<boolean>;
|
|
158
|
+
/** @returns {Promise<boolean>} */
|
|
159
|
+
_shouldWaitForOnline(): Promise<boolean>;
|
|
160
|
+
/** @returns {void} */
|
|
161
|
+
_ensureNetworkMonitorSubscription(): void;
|
|
162
|
+
/** @returns {void} */
|
|
163
|
+
_teardownNetworkMonitorSubscription(): void;
|
|
126
164
|
/**
|
|
127
165
|
* Sets a global metadata value that is sent to the server.
|
|
128
166
|
* For WebSocket connections, a metadata update message is sent immediately.
|
|
@@ -135,16 +173,19 @@ export default class VelociousWebsocketClient {
|
|
|
135
173
|
getMetadata(): Record<string, any>;
|
|
136
174
|
/**
|
|
137
175
|
* Ensure a websocket connection is open.
|
|
176
|
+
* Auto-reconnect and online gating are enabled by default.
|
|
177
|
+
* Pass `autoReconnect: false` or `waitForOnline: false` only when a caller
|
|
178
|
+
* explicitly needs lower-level behavior.
|
|
179
|
+
* @param {{autoReconnect?: boolean, waitForOnline?: boolean, resetReconnectState?: boolean}} [options]
|
|
138
180
|
* @returns {Promise<void>} - Resolves when complete.
|
|
139
181
|
*/
|
|
140
|
-
connect(
|
|
182
|
+
connect({ autoReconnect, waitForOnline, resetReconnectState }?: {
|
|
183
|
+
autoReconnect?: boolean;
|
|
184
|
+
waitForOnline?: boolean;
|
|
185
|
+
resetReconnectState?: boolean;
|
|
186
|
+
}): Promise<void>;
|
|
141
187
|
connectPromise: Promise<any> | undefined;
|
|
142
188
|
socket: WebSocket | undefined;
|
|
143
|
-
/**
|
|
144
|
-
* Connect and enable auto-reconnect. Resets reconnect state.
|
|
145
|
-
* @returns {Promise<void>} - Resolves when connected.
|
|
146
|
-
*/
|
|
147
|
-
connectWithReconnect(): Promise<void>;
|
|
148
189
|
/**
|
|
149
190
|
* Close the websocket and clear pending state.
|
|
150
191
|
* @returns {Promise<void>} - Resolves when complete.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-client.d.ts","sourceRoot":"","sources":["../../../src/http-client/websocket-client.js"],"names":[],"mappings":"AAQA;;;GAGG;AACH;IAQE
|
|
1
|
+
{"version":3,"file":"websocket-client.d.ts","sourceRoot":"","sources":["../../../src/http-client/websocket-client.js"],"names":[],"mappings":"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"}
|