@flexemarkets/fm-sdk 0.1.4 → 0.2.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 +16 -19
- package/dist/client.d.ts +15 -15
- package/dist/client.js +38 -28
- package/dist/client.js.map +1 -1
- package/dist/{market-view.d.ts → desk.d.ts} +57 -43
- package/dist/{market-view.js → desk.js} +66 -50
- package/dist/desk.js.map +1 -0
- package/dist/index.d.ts +7 -7
- package/dist/index.js +15 -6
- package/dist/index.js.map +1 -1
- package/dist/order-utils.d.ts +27 -2
- package/dist/order-utils.js +51 -2
- package/dist/order-utils.js.map +1 -1
- package/dist/orderbook.d.ts +17 -8
- package/dist/orderbook.js +22 -9
- package/dist/orderbook.js.map +1 -1
- package/dist/snapshot.d.ts +1 -1
- package/dist/stomp.d.ts +36 -4
- package/dist/stomp.js +90 -2
- package/dist/stomp.js.map +1 -1
- package/dist/ticker.js +20 -44
- package/dist/ticker.js.map +1 -1
- package/dist/trades.d.ts +12 -12
- package/dist/trades.js +11 -11
- package/dist/trades.js.map +1 -1
- package/dist/types.d.ts +4 -4
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/dist/market-view.js.map +0 -1
package/dist/order-utils.d.ts
CHANGED
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Port of fm.order_utils (Python) / fm.OrderUtils (Java).
|
|
5
5
|
*/
|
|
6
|
-
import { Order, type
|
|
6
|
+
import { Order, type Market, type OrderSide } from "./types.js";
|
|
7
7
|
export declare function isCancel(order: Order): boolean;
|
|
8
8
|
export declare function isLimit(order: Order): boolean;
|
|
9
9
|
export declare function isBuy(side: string | null | undefined): boolean;
|
|
10
10
|
export declare function isSell(side: string | null | undefined): boolean;
|
|
11
|
-
export declare function contra(side: string):
|
|
11
|
+
export declare function contra(side: string): OrderSide;
|
|
12
12
|
/** Order is resting on the book (consumer is null). */
|
|
13
13
|
export declare function isAvailable(order: Order): boolean;
|
|
14
14
|
/** Order has been matched with another order. */
|
|
@@ -20,3 +20,28 @@ export declare function isSubmit(order: Order): boolean;
|
|
|
20
20
|
export declare function findOrder(orders: Order[], orderId: number | null | undefined): Order | null;
|
|
21
21
|
/** Determine if an order is currently resting on the book. */
|
|
22
22
|
export declare function isResting(orders: Order[], order: Order): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* True once an order has a consumer: traded against, whole or in part.
|
|
25
|
+
*
|
|
26
|
+
* The positive complement of {@link isAvailable}, named for what a position
|
|
27
|
+
* keeps rather than for the mechanism. A split leaves a remainder order behind,
|
|
28
|
+
* so from the position's point of view the original is finished either way --
|
|
29
|
+
* which is why this is one predicate rather than `isConsumed(o) || isSplit(o)`
|
|
30
|
+
* spelled out at every call site.
|
|
31
|
+
*/
|
|
32
|
+
export declare function isConsumedOrSplit(order: Order | null): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* True if `rhs` was supplied by `lhs` -- the two sides of one trade.
|
|
35
|
+
*
|
|
36
|
+
* The kind of question this module exists for: it cannot be answered by either
|
|
37
|
+
* order alone, only by the reference between them.
|
|
38
|
+
*/
|
|
39
|
+
export declare function isSupplier(lhs: Order | null, rhs: Order | null): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* A limit order ready to submit.
|
|
42
|
+
*
|
|
43
|
+
* {@link Order} has seventeen fields because it is what the server returns; a
|
|
44
|
+
* caller building one to send sets four and leaves the rest to the exchange.
|
|
45
|
+
* Naming those at the call site beats an object literal of mostly nulls.
|
|
46
|
+
*/
|
|
47
|
+
export declare function limit(market: Market, side: OrderSide, units: number, price: number): Order;
|
package/dist/order-utils.js
CHANGED
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Port of fm.order_utils (Python) / fm.OrderUtils (Java).
|
|
5
5
|
*/
|
|
6
|
-
import { toOrderType, toSide } from "./types.js";
|
|
6
|
+
import { OrderType, toOrderType, toSide } from "./types.js";
|
|
7
7
|
export function isCancel(order) {
|
|
8
8
|
return toOrderType(order.type) === "CANCEL";
|
|
9
9
|
}
|
|
10
10
|
export function isLimit(order) {
|
|
11
11
|
return toOrderType(order.type) === "LIMIT";
|
|
12
12
|
}
|
|
13
|
-
// These take `string` rather than `
|
|
13
|
+
// These take `string` rather than `OrderSide` on purpose: they are the lenient
|
|
14
14
|
// door. A caller holding a value off the wire, or out of a config file, can
|
|
15
15
|
// ask without narrowing it first -- which is what the old toUpperCase()
|
|
16
16
|
// comparison allowed and what removing it would quietly take away.
|
|
@@ -132,4 +132,53 @@ export function isResting(orders, order) {
|
|
|
132
132
|
// split order with child younger than its consumer is resting
|
|
133
133
|
return isSupplierOlder(orders, firstChild(orders, order));
|
|
134
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* True once an order has a consumer: traded against, whole or in part.
|
|
137
|
+
*
|
|
138
|
+
* The positive complement of {@link isAvailable}, named for what a position
|
|
139
|
+
* keeps rather than for the mechanism. A split leaves a remainder order behind,
|
|
140
|
+
* so from the position's point of view the original is finished either way --
|
|
141
|
+
* which is why this is one predicate rather than `isConsumed(o) || isSplit(o)`
|
|
142
|
+
* spelled out at every call site.
|
|
143
|
+
*/
|
|
144
|
+
export function isConsumedOrSplit(order) {
|
|
145
|
+
return order != null && order.consumer != null;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* True if `rhs` was supplied by `lhs` -- the two sides of one trade.
|
|
149
|
+
*
|
|
150
|
+
* The kind of question this module exists for: it cannot be answered by either
|
|
151
|
+
* order alone, only by the reference between them.
|
|
152
|
+
*/
|
|
153
|
+
export function isSupplier(lhs, rhs) {
|
|
154
|
+
return lhs != null && rhs != null && lhs.id === rhs.supplier;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* A limit order ready to submit.
|
|
158
|
+
*
|
|
159
|
+
* {@link Order} has seventeen fields because it is what the server returns; a
|
|
160
|
+
* caller building one to send sets four and leaves the rest to the exchange.
|
|
161
|
+
* Naming those at the call site beats an object literal of mostly nulls.
|
|
162
|
+
*/
|
|
163
|
+
export function limit(market, side, units, price) {
|
|
164
|
+
return {
|
|
165
|
+
id: 0,
|
|
166
|
+
original: 0,
|
|
167
|
+
supplier: 0,
|
|
168
|
+
consumer: null,
|
|
169
|
+
type: OrderType.LIMIT,
|
|
170
|
+
side,
|
|
171
|
+
units,
|
|
172
|
+
price,
|
|
173
|
+
ownerId: null,
|
|
174
|
+
marketplaceId: market.marketplaceId,
|
|
175
|
+
sessionId: 0,
|
|
176
|
+
symbol: market.symbol,
|
|
177
|
+
marketId: market.id,
|
|
178
|
+
ownerTarget: null,
|
|
179
|
+
clientDescription: null,
|
|
180
|
+
createdDate: null,
|
|
181
|
+
lastModifiedDate: null,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
135
184
|
//# sourceMappingURL=order-utils.js.map
|
package/dist/order-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order-utils.js","sourceRoot":"","sources":["../src/order-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAS,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"order-utils.js","sourceRoot":"","sources":["../src/order-utils.ts"],"names":[],"mappings":"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"}
|
package/dist/orderbook.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Order book maintained from WebSocket order events.
|
|
3
3
|
*
|
|
4
|
-
* Port of fm.orderbook (Python) / fm.
|
|
4
|
+
* Port of fm.orderbook (Python) / fm.Book (Java).
|
|
5
5
|
*/
|
|
6
6
|
import type { Market, Order } from "./types.js";
|
|
7
7
|
/**
|
|
@@ -10,7 +10,7 @@ import type { Market, Order } from "./types.js";
|
|
|
10
10
|
* Updated incrementally from WebSocket ORDERS-UPDATE events.
|
|
11
11
|
* Buys are sorted highest-first (best bid), sells lowest-first (best ask).
|
|
12
12
|
*/
|
|
13
|
-
export declare class
|
|
13
|
+
export declare class Book {
|
|
14
14
|
readonly market: Market;
|
|
15
15
|
private readonly _buys;
|
|
16
16
|
private readonly _sells;
|
|
@@ -21,6 +21,15 @@ export declare class OrderBook {
|
|
|
21
21
|
update(orders: Order[]): void;
|
|
22
22
|
private _add;
|
|
23
23
|
private _remove;
|
|
24
|
+
/**
|
|
25
|
+
* The book a side belongs to, refusing anything that does not name one.
|
|
26
|
+
*
|
|
27
|
+
* This used to be `isBuy(side) ? this._buys : this._sells`, which is the
|
|
28
|
+
* complement of buy rather than a test for sell, so a null side fell to the
|
|
29
|
+
* offer book. A null side is a real value on the wire -- a cancel carries
|
|
30
|
+
* none -- so that guess was reachable, and a book kept on a guess is wrong
|
|
31
|
+
* silently: units come off a side the order was never on.
|
|
32
|
+
*/
|
|
24
33
|
private _priceLevels;
|
|
25
34
|
hasValue(side: string): boolean;
|
|
26
35
|
bestPrice(side: string): number;
|
|
@@ -35,23 +44,23 @@ export declare class OrderBook {
|
|
|
35
44
|
sellLevels(): [number, number][];
|
|
36
45
|
/**
|
|
37
46
|
* Reset to just-constructed state — empty levels, initialized=false.
|
|
38
|
-
* Used by
|
|
47
|
+
* Used by Desk's Phase 2b gap-recovery: refetch the snapshot,
|
|
39
48
|
* clear(), reapply via update(), so the next delta with
|
|
40
49
|
* isAvailable=false doesn't underflow against stale levels.
|
|
41
50
|
*/
|
|
42
51
|
clear(): void;
|
|
43
52
|
}
|
|
44
53
|
/**
|
|
45
|
-
* Container of
|
|
54
|
+
* Container of Book instances, one per market.
|
|
46
55
|
*/
|
|
47
|
-
export declare class
|
|
56
|
+
export declare class BookIndex {
|
|
48
57
|
private readonly _books;
|
|
49
58
|
constructor(markets: Market[]);
|
|
50
59
|
update(orders: Order[]): void;
|
|
51
60
|
hasValue(marketId: number, side: string): boolean;
|
|
52
61
|
bestPrice(marketId: number, side: string): number;
|
|
53
|
-
collection():
|
|
54
|
-
get(marketId: number):
|
|
55
|
-
/** Clear every contained book — see {@link
|
|
62
|
+
collection(): Book[];
|
|
63
|
+
get(marketId: number): Book;
|
|
64
|
+
/** Clear every contained book — see {@link Book.clear}. */
|
|
56
65
|
clear(): void;
|
|
57
66
|
}
|
package/dist/orderbook.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Order book maintained from WebSocket order events.
|
|
3
3
|
*
|
|
4
|
-
* Port of fm.orderbook (Python) / fm.
|
|
4
|
+
* Port of fm.orderbook (Python) / fm.Book (Java).
|
|
5
5
|
*/
|
|
6
|
-
import { findOrder, isAvailable, isBuy, isCancel, isResting, isSplit, isSymbol, } from "./order-utils.js";
|
|
6
|
+
import { findOrder, isAvailable, isBuy, isSell, isCancel, isResting, isSplit, isSymbol, } from "./order-utils.js";
|
|
7
7
|
/**
|
|
8
8
|
* Aggregated price-level order book for a single market.
|
|
9
9
|
*
|
|
10
10
|
* Updated incrementally from WebSocket ORDERS-UPDATE events.
|
|
11
11
|
* Buys are sorted highest-first (best bid), sells lowest-first (best ask).
|
|
12
12
|
*/
|
|
13
|
-
export class
|
|
13
|
+
export class Book {
|
|
14
14
|
market;
|
|
15
15
|
_buys = new Map(); // price → units
|
|
16
16
|
_sells = new Map(); // price → units
|
|
@@ -89,8 +89,21 @@ export class OrderBook {
|
|
|
89
89
|
levels.set(price, updated);
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* The book a side belongs to, refusing anything that does not name one.
|
|
94
|
+
*
|
|
95
|
+
* This used to be `isBuy(side) ? this._buys : this._sells`, which is the
|
|
96
|
+
* complement of buy rather than a test for sell, so a null side fell to the
|
|
97
|
+
* offer book. A null side is a real value on the wire -- a cancel carries
|
|
98
|
+
* none -- so that guess was reachable, and a book kept on a guess is wrong
|
|
99
|
+
* silently: units come off a side the order was never on.
|
|
100
|
+
*/
|
|
92
101
|
_priceLevels(side) {
|
|
93
|
-
|
|
102
|
+
if (isBuy(side))
|
|
103
|
+
return this._buys;
|
|
104
|
+
if (isSell(side))
|
|
105
|
+
return this._sells;
|
|
106
|
+
throw new Error(`An order must name its side to be placed on a book; got: ${side}`);
|
|
94
107
|
}
|
|
95
108
|
// -- query -----------------------------------------------------------------
|
|
96
109
|
hasValue(side) {
|
|
@@ -133,7 +146,7 @@ export class OrderBook {
|
|
|
133
146
|
}
|
|
134
147
|
/**
|
|
135
148
|
* Reset to just-constructed state — empty levels, initialized=false.
|
|
136
|
-
* Used by
|
|
149
|
+
* Used by Desk's Phase 2b gap-recovery: refetch the snapshot,
|
|
137
150
|
* clear(), reapply via update(), so the next delta with
|
|
138
151
|
* isAvailable=false doesn't underflow against stale levels.
|
|
139
152
|
*/
|
|
@@ -144,13 +157,13 @@ export class OrderBook {
|
|
|
144
157
|
}
|
|
145
158
|
}
|
|
146
159
|
/**
|
|
147
|
-
* Container of
|
|
160
|
+
* Container of Book instances, one per market.
|
|
148
161
|
*/
|
|
149
|
-
export class
|
|
162
|
+
export class BookIndex {
|
|
150
163
|
_books = new Map();
|
|
151
164
|
constructor(markets) {
|
|
152
165
|
for (const m of markets) {
|
|
153
|
-
this._books.set(m.id, new
|
|
166
|
+
this._books.set(m.id, new Book(m));
|
|
154
167
|
}
|
|
155
168
|
}
|
|
156
169
|
update(orders) {
|
|
@@ -170,7 +183,7 @@ export class OrderBooks {
|
|
|
170
183
|
get(marketId) {
|
|
171
184
|
return this._books.get(marketId);
|
|
172
185
|
}
|
|
173
|
-
/** Clear every contained book — see {@link
|
|
186
|
+
/** Clear every contained book — see {@link Book.clear}. */
|
|
174
187
|
clear() {
|
|
175
188
|
for (const book of this._books.values())
|
|
176
189
|
book.clear();
|
package/dist/orderbook.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orderbook.js","sourceRoot":"","sources":["../src/orderbook.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"orderbook.js","sourceRoot":"","sources":["../src/orderbook.ts"],"names":[],"mappings":"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"}
|
package/dist/snapshot.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* REST snapshot response bundle: parsed body + the `x-fm-as-of-seq`
|
|
3
3
|
* header value the snapshot was read at. Returned by `Flexemarkets`
|
|
4
|
-
* V1 snapshot methods so `
|
|
4
|
+
* V1 snapshot methods so `Desk` (and any other caller that
|
|
5
5
|
* mixes REST snapshots with WS deltas) can reconcile the two
|
|
6
6
|
* streams: apply deltas whose `seq` is greater than `asOfSeq` and
|
|
7
7
|
* skip those whose seq is less than or equal.
|
package/dist/stomp.d.ts
CHANGED
|
@@ -5,6 +5,17 @@
|
|
|
5
5
|
* EventListener / Java StompListener behaviour.
|
|
6
6
|
*/
|
|
7
7
|
import type { Holding, Order, Session, Version } from "./types.js";
|
|
8
|
+
/** What this client advertises in CONNECT, and must therefore keep to. */
|
|
9
|
+
export declare const ADVERTISED_HEARTBEAT_MS = 30000;
|
|
10
|
+
/**
|
|
11
|
+
* How often this client actually sends one. Under the 30s it advertises, so a
|
|
12
|
+
* late timer still lands inside the window it promised, and well under the 55s
|
|
13
|
+
* at which Heroku's router closes an idle connection and records an H15
|
|
14
|
+
* against the app. Named so the interval can be tested against the thing it
|
|
15
|
+
* exists to stay under.
|
|
16
|
+
*/
|
|
17
|
+
export declare const HEARTBEAT_INTERVAL_MS = 25000;
|
|
18
|
+
export declare const HEROKU_IDLE_TIMEOUT_MS = 55000;
|
|
8
19
|
export interface StompFrame {
|
|
9
20
|
command: string;
|
|
10
21
|
headers: Record<string, string>;
|
|
@@ -24,9 +35,9 @@ export interface StreamDropped {
|
|
|
24
35
|
* happened while the socket was down was not delivered.
|
|
25
36
|
*
|
|
26
37
|
* Carries the marketplace because one client can hold several subscriptions,
|
|
27
|
-
* and "we are back" does not say which
|
|
38
|
+
* and "we are back" does not say which desk to reseed.
|
|
28
39
|
*/
|
|
29
|
-
export interface
|
|
40
|
+
export interface StreamReconnected {
|
|
30
41
|
kind: "reconnected";
|
|
31
42
|
marketplaceId: number;
|
|
32
43
|
}
|
|
@@ -52,7 +63,7 @@ export interface OrdersUpdate {
|
|
|
52
63
|
readonly orders: Order[];
|
|
53
64
|
readonly seq: number;
|
|
54
65
|
}
|
|
55
|
-
export type FmEvent = Version | Session | Session[] | Holding | OrdersUpdate | StreamDropped |
|
|
66
|
+
export type FmEvent = Version | Session | Session[] | Holding | OrdersUpdate | StreamDropped | StreamReconnected | FrameUnreadable;
|
|
56
67
|
export type EventCallback = (event: FmEvent) => void;
|
|
57
68
|
/** Sentinel for "no seq header" — see OrdersUpdate.seq docstring. */
|
|
58
69
|
export declare const NO_SEQ = -1;
|
|
@@ -67,6 +78,19 @@ export declare class EventListener {
|
|
|
67
78
|
private readonly _parseOrder;
|
|
68
79
|
private _ws;
|
|
69
80
|
private _closed;
|
|
81
|
+
/**
|
|
82
|
+
* Sends the heartbeats this client promises.
|
|
83
|
+
*
|
|
84
|
+
* IT PROMISED THEM AND NEVER SENT ONE. The CONNECT frame has always carried
|
|
85
|
+
* `heart-beat:30000,30000` -- "I will send every 30s, send me one every 30s"
|
|
86
|
+
* -- and nothing here wrote to the socket again except SUBSCRIBE. Worse than
|
|
87
|
+
* the other two SDKs: `ws` sends no WebSocket ping of its own unless asked,
|
|
88
|
+
* so this client had no keepalive at any layer. Java fixed this first;
|
|
89
|
+
* TypeScript and Python advertised the same thing and were left behind.
|
|
90
|
+
*
|
|
91
|
+
* unref()'d, so it can never hold the process open.
|
|
92
|
+
*/
|
|
93
|
+
private _heartbeat;
|
|
70
94
|
private _subscriptionCounter;
|
|
71
95
|
private _reconnecting;
|
|
72
96
|
constructor(wsUrl: string, bearerToken: string, marketplaceId: number, callback: EventCallback, clientDescription: string, parseHolding: (data: Record<string, unknown>) => Holding, parseOrder: (data: Record<string, unknown>) => Order);
|
|
@@ -74,7 +98,7 @@ export declare class EventListener {
|
|
|
74
98
|
/**
|
|
75
99
|
* React to a dropped stream by restoring it.
|
|
76
100
|
*
|
|
77
|
-
* On success a `
|
|
101
|
+
* On success a `StreamReconnected` is delivered so consumers know their state
|
|
78
102
|
* needs reseeding -- matching Java, where the subscription has always
|
|
79
103
|
* restored itself rather than leaving the caller to notice.
|
|
80
104
|
*
|
|
@@ -84,6 +108,14 @@ export declare class EventListener {
|
|
|
84
108
|
_onStreamDropped(exception: Error): void;
|
|
85
109
|
reconnect(): Promise<void>;
|
|
86
110
|
close(): void;
|
|
111
|
+
/**
|
|
112
|
+
* Send a bare EOL every {@link HEARTBEAT_INTERVAL_MS}.
|
|
113
|
+
*
|
|
114
|
+
* A newline on its own is what STOMP 1.2 defines a heartbeat to be, so the
|
|
115
|
+
* server reads it as one and nothing else parses it as a frame.
|
|
116
|
+
*/
|
|
117
|
+
private _startHeartbeats;
|
|
118
|
+
private _stopHeartbeats;
|
|
87
119
|
private _connect;
|
|
88
120
|
private _disconnect;
|
|
89
121
|
private _nextId;
|
package/dist/stomp.js
CHANGED
|
@@ -7,6 +7,17 @@
|
|
|
7
7
|
import WebSocket from "ws";
|
|
8
8
|
import { toInstant } from "./timestamps.js";
|
|
9
9
|
const HEARTBEAT_MS = 30_000;
|
|
10
|
+
/** What this client advertises in CONNECT, and must therefore keep to. */
|
|
11
|
+
export const ADVERTISED_HEARTBEAT_MS = HEARTBEAT_MS;
|
|
12
|
+
/**
|
|
13
|
+
* How often this client actually sends one. Under the 30s it advertises, so a
|
|
14
|
+
* late timer still lands inside the window it promised, and well under the 55s
|
|
15
|
+
* at which Heroku's router closes an idle connection and records an H15
|
|
16
|
+
* against the app. Named so the interval can be tested against the thing it
|
|
17
|
+
* exists to stay under.
|
|
18
|
+
*/
|
|
19
|
+
export const HEARTBEAT_INTERVAL_MS = 25_000;
|
|
20
|
+
export const HEROKU_IDLE_TIMEOUT_MS = 55_000;
|
|
10
21
|
const NULL = "\x00";
|
|
11
22
|
/**
|
|
12
23
|
* Prefix on the `/app` SUBSCRIBE destination selecting fm-server's WS
|
|
@@ -141,6 +152,22 @@ function parseOrders(data, parseOrder) {
|
|
|
141
152
|
// ---------------------------------------------------------------------------
|
|
142
153
|
// EventListener — manages WS + STOMP connection
|
|
143
154
|
// ---------------------------------------------------------------------------
|
|
155
|
+
/**
|
|
156
|
+
* Whether the handshake was refused for who we are rather than for what the
|
|
157
|
+
* network did.
|
|
158
|
+
*
|
|
159
|
+
* <p>`ws` reports a rejected upgrade as `Unexpected server response: 401`, so
|
|
160
|
+
* the status is read back out of that. 403 counts too: a token that is valid
|
|
161
|
+
* but not permitted here will not become permitted by being presented again.
|
|
162
|
+
*/
|
|
163
|
+
function isAuthRefusal(failure) {
|
|
164
|
+
for (let cause = failure; cause instanceof Error; cause = cause.cause) {
|
|
165
|
+
const status = /Unexpected server response:\s*(\d{3})/.exec(cause.message)?.[1];
|
|
166
|
+
if (status === "401" || status === "403")
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
144
171
|
export class EventListener {
|
|
145
172
|
_wsUrl;
|
|
146
173
|
_bearerToken;
|
|
@@ -151,6 +178,19 @@ export class EventListener {
|
|
|
151
178
|
_parseOrder;
|
|
152
179
|
_ws = null;
|
|
153
180
|
_closed = false;
|
|
181
|
+
/**
|
|
182
|
+
* Sends the heartbeats this client promises.
|
|
183
|
+
*
|
|
184
|
+
* IT PROMISED THEM AND NEVER SENT ONE. The CONNECT frame has always carried
|
|
185
|
+
* `heart-beat:30000,30000` -- "I will send every 30s, send me one every 30s"
|
|
186
|
+
* -- and nothing here wrote to the socket again except SUBSCRIBE. Worse than
|
|
187
|
+
* the other two SDKs: `ws` sends no WebSocket ping of its own unless asked,
|
|
188
|
+
* so this client had no keepalive at any layer. Java fixed this first;
|
|
189
|
+
* TypeScript and Python advertised the same thing and were left behind.
|
|
190
|
+
*
|
|
191
|
+
* unref()'d, so it can never hold the process open.
|
|
192
|
+
*/
|
|
193
|
+
_heartbeat = null;
|
|
154
194
|
_subscriptionCounter = 0;
|
|
155
195
|
_reconnecting = false;
|
|
156
196
|
constructor(wsUrl, bearerToken, marketplaceId, callback, clientDescription, parseHolding, parseOrder) {
|
|
@@ -181,6 +221,7 @@ export class EventListener {
|
|
|
181
221
|
// unexpected but continue
|
|
182
222
|
}
|
|
183
223
|
this._subscribe();
|
|
224
|
+
this._startHeartbeats();
|
|
184
225
|
this._receiveLoop();
|
|
185
226
|
resolve();
|
|
186
227
|
});
|
|
@@ -195,7 +236,7 @@ export class EventListener {
|
|
|
195
236
|
/**
|
|
196
237
|
* React to a dropped stream by restoring it.
|
|
197
238
|
*
|
|
198
|
-
* On success a `
|
|
239
|
+
* On success a `StreamReconnected` is delivered so consumers know their state
|
|
199
240
|
* needs reseeding -- matching Java, where the subscription has always
|
|
200
241
|
* restored itself rather than leaving the caller to notice.
|
|
201
242
|
*
|
|
@@ -228,7 +269,26 @@ export class EventListener {
|
|
|
228
269
|
await this.start();
|
|
229
270
|
return;
|
|
230
271
|
}
|
|
231
|
-
catch {
|
|
272
|
+
catch (exception) {
|
|
273
|
+
// A REJECTED TOKEN IS NOT A BLIP, and retrying it is not patience --
|
|
274
|
+
// it is a client hammering a server that has already given its final
|
|
275
|
+
// answer. Measured 2026-09-03: one NAT gateway produced 11,918
|
|
276
|
+
// handshake 401s in two hours, about 100 a minute, against 360
|
|
277
|
+
// successful connections from every other client combined. Nothing
|
|
278
|
+
// told the operator their token had expired; the loop simply ran.
|
|
279
|
+
//
|
|
280
|
+
// So an auth refusal ends the stream and says why, and every other
|
|
281
|
+
// failure keeps the existing retry: a server restart or a network drop
|
|
282
|
+
// IS a blip, and recovering from it is what this loop is for.
|
|
283
|
+
if (isAuthRefusal(exception)) {
|
|
284
|
+
this._closed = true;
|
|
285
|
+
this._callback({
|
|
286
|
+
kind: "stream-dropped",
|
|
287
|
+
exception: new Error("WebSocket refused: the token was rejected. It has expired or was " +
|
|
288
|
+
"signed for another server; reconnecting cannot fix it.", { cause: exception }),
|
|
289
|
+
});
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
232
292
|
await new Promise((r) => setTimeout(r, 2000));
|
|
233
293
|
}
|
|
234
294
|
}
|
|
@@ -237,8 +297,36 @@ export class EventListener {
|
|
|
237
297
|
if (this._closed)
|
|
238
298
|
return;
|
|
239
299
|
this._closed = true;
|
|
300
|
+
this._stopHeartbeats();
|
|
240
301
|
this._disconnect();
|
|
241
302
|
}
|
|
303
|
+
/**
|
|
304
|
+
* Send a bare EOL every {@link HEARTBEAT_INTERVAL_MS}.
|
|
305
|
+
*
|
|
306
|
+
* A newline on its own is what STOMP 1.2 defines a heartbeat to be, so the
|
|
307
|
+
* server reads it as one and nothing else parses it as a frame.
|
|
308
|
+
*/
|
|
309
|
+
_startHeartbeats() {
|
|
310
|
+
this._stopHeartbeats();
|
|
311
|
+
this._heartbeat = setInterval(() => {
|
|
312
|
+
const ws = this._ws;
|
|
313
|
+
if (this._closed || ws === null || ws.readyState !== WebSocket.OPEN)
|
|
314
|
+
return;
|
|
315
|
+
try {
|
|
316
|
+
ws.send("\n");
|
|
317
|
+
}
|
|
318
|
+
catch {
|
|
319
|
+
// a dead socket is the receive loop's problem, not this timer's
|
|
320
|
+
}
|
|
321
|
+
}, HEARTBEAT_INTERVAL_MS);
|
|
322
|
+
this._heartbeat.unref?.();
|
|
323
|
+
}
|
|
324
|
+
_stopHeartbeats() {
|
|
325
|
+
if (this._heartbeat !== null) {
|
|
326
|
+
clearInterval(this._heartbeat);
|
|
327
|
+
this._heartbeat = null;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
242
330
|
// -- WebSocket connection --------------------------------------------------
|
|
243
331
|
_connect() {
|
|
244
332
|
return new WebSocket(this._wsUrl, ["v12.stomp", "v11.stomp", "v10.stomp"], {
|
package/dist/stomp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stomp.js","sourceRoot":"","sources":["../src/stomp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,SAAS,MAAM,IAAI,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,MAAM,YAAY,GAAG,MAAM,CAAC;AAC5B,MAAM,IAAI,GAAG,MAAM,CAAC;AAEpB;;;;;;;;;;;;GAYG;AACH,MAAM,kBAAkB,GAAG,CAAC,GAAW,EAAE;IACvC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACvE,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAC1B,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC7B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,EAAE,CAAC,CAAC;AACvE,CAAC,CAAC,EAAE,CAAC;AAYL,MAAM,UAAU,WAAW,CAAC,KAAiB;IAC3C,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,oCAAoC;IACpC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAEhC,4DAA4D;IAC5D,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,aAAqB,CAAC;IAC1B,IAAI,IAAY,CAAC;IACjB,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,aAAa,GAAG,GAAG,CAAC;QACpB,IAAI,GAAG,EAAE,CAAC;IACZ,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAC5C,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/B,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACpC,CAAC;AAkED,8EAA8E;AAC9E,iEAAiE;AACjE,8EAA8E;AAE9E,MAAM,YAAY,GAAG,cAAc,CAAC;AACpC,MAAM,UAAU,GAAK,KAAK,CAAC;AAE3B,qEAAqE;AACrE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC;AAEzB,SAAS,UAAU,CACjB,KAAiB,EACjB,YAAwD,EACxD,UAAoD;IAEpD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC5C,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAEvC,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;QAC5B,KAAK,cAAc;YACjB,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAChC,KAAK,gBAAgB;YACnB,OAAO,YAAY,CAAC,IAA+B,CAAC,CAAC;QACvD,KAAK,gBAAgB;YACnB,OAAO,YAAY,CAAC,IAA+B,CAAC,CAAC;QACvD,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;YACjD,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;QAC/E,CAAC;QACD;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED;2BAC2B;AAC3B,SAAS,SAAS,CAAC,KAAyB;IAC1C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACvC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACzC,CAAC;AAED,SAAS,YAAY,CAAC,IAAa;IACjC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;QACnE,OAAO,EAAE,OAAO,EAAG,IAA+B,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;IACpE,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAA6B;IACxD,OAAO;QACL,aAAa,EAAG,IAAI,CAAC,aAAwB,IAAI,CAAC;QAClD,YAAY,EAAG,IAAI,CAAC,YAAuB,IAAI,CAAC;QAChD,EAAE,EAAG,IAAI,CAAC,EAAa,IAAI,CAAC;QAC5B,QAAQ,EAAG,IAAI,CAAC,QAAmB,IAAI,CAAC;QACxC,KAAK,EAAG,IAAI,CAAC,KAAgB,IAAI,IAAI;QACrC,IAAI,EAAG,IAAI,CAAC,IAAe,IAAI,IAAI;QACnC,WAAW,EAAG,IAAI,CAAC,WAAsB,IAAI,IAAI;QACjD,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,QAAkB,CAAC;QAC5C,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,SAAmB,CAAC;KAC/C,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAa;IACrC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAA4B,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,WAAW,CAClB,IAAa,EACb,UAAoD;IAEpD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAA4B,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,8EAA8E;AAC9E,gDAAgD;AAChD,8EAA8E;AAE9E,MAAM,OAAO,aAAa;IACP,MAAM,CAAS;IACf,YAAY,CAAS;IACrB,cAAc,CAAS;IACvB,SAAS,CAAgB;IACzB,kBAAkB,CAAS;IAC3B,aAAa,CAA6C;IAC1D,WAAW,CAA2C;IAE/D,GAAG,GAAqB,IAAI,CAAC;IAC7B,OAAO,GAAG,KAAK,CAAC;IAChB,oBAAoB,GAAG,CAAC,CAAC;IACzB,aAAa,GAAG,KAAK,CAAC;IAE9B,YACE,KAAa,EACb,WAAmB,EACnB,aAAqB,EACrB,QAAuB,EACvB,iBAAyB,EACzB,YAAwD,EACxD,UAAoD;QAEpD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;QAC5C,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED,6EAA6E;IAE7E,KAAK;QACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;gBACvB,IAAI,CAAC;oBACH,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,GAAG,CAAC,CAAC;oBACZ,OAAO;gBACT,CAAC;gBACD,0CAA0C;gBAC1C,IAAI,CAAC,GAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;oBAChC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;oBAC1C,IAAI,KAAK,CAAC,OAAO,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE,EAAE,CAAC;wBAC1D,0BAA0B;oBAC5B,CAAC;oBACD,IAAI,CAAC,UAAU,EAAE,CAAC;oBAClB,IAAI,CAAC,YAAY,EAAE,CAAC;oBACpB,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;oBAClB,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;OASG;IACH,gBAAgB,CAAC,SAAgB;QAC/B,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC,CAAC;QACtD,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO;QAC/B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAE1B,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;gBACvB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;oBAClB,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;gBAC9E,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAED,KAAK,CAAC,SAAS;QACb,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED,6EAA6E;IAErE,QAAQ;QACd,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE;YACzE,OAAO,EAAE;gBACP,aAAa,EAAE,IAAI,CAAC,YAAY;aACjC;YACD,UAAU,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI;SAC9B,CAAC,CAAC;IACL,CAAC;IAEO,WAAW;QACjB,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC;gBACH,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACnB,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;QAClB,CAAC;IACH,CAAC;IAED,6EAA6E;IAErE,OAAO;QACb,IAAI,CAAC,oBAAoB,IAAI,CAAC,CAAC;QAC/B,OAAO,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC5C,CAAC;IAEO,aAAa;QACnB,MAAM,KAAK,GAAe;YACxB,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE;gBACP,gBAAgB,EAAE,aAAa;gBAC/B,YAAY,EAAE,GAAG,YAAY,IAAI,YAAY,EAAE;gBAC/C,mBAAmB,EAAE,IAAI,CAAC,kBAAkB;gBAC5C,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;aAC9C;YACD,IAAI,EAAE,EAAE;SACT,CAAC;QACF,IAAI,CAAC,GAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IACrC,CAAC;IAEO,UAAU;QAChB,6DAA6D;QAC7D,gEAAgE;QAChE,iEAAiE;QACjE,qEAAqE;QACrE,kEAAkE;QAClE,gEAAgE;QAChE,wCAAwC;QACxC,MAAM,QAAQ,GAAG,iBAAiB,IAAI,CAAC,cAAc,EAAE,CAAC;QACxD,KAAK,MAAM,IAAI,IAAI;YACjB,cAAc,QAAQ,EAAE;YACxB,SAAS,QAAQ,EAAE;YACnB,OAAO,kBAAkB,GAAG,QAAQ,EAAE;SACvC,EAAE,CAAC;YACF,MAAM,KAAK,GAAe;gBACxB,OAAO,EAAE,WAAW;gBACpB,OAAO,EAAE;oBACP,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE;oBAClB,WAAW,EAAE,IAAI;iBAClB;gBACD,IAAI,EAAE,EAAE;aACT,CAAC;YACF,IAAI,CAAC,GAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,6EAA6E;IAErE,YAAY;QAClB,IAAI,CAAC,GAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;YAC9B,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,CAAC,kBAAkB;YAEtD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;YAEhC,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBACtE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBACnB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;gBACrC,IAAI,CAAC,SAAS,CAAC;oBACb,IAAI,EAAE,kBAAkB;oBACxB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,SAAS,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,IAAI,aAAa,CAAC;iBAC7D,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACzB,IAAI,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC5B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"stomp.js","sourceRoot":"","sources":["../src/stomp.ts"],"names":[],"mappings":"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"}
|