@nevuamarkets/poly-websockets 0.2.0 → 0.2.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.
@@ -113,74 +113,83 @@ class GroupSocket {
113
113
  }, (0, crypto_1.randomInt)((0, ms_1.default)('15s'), (0, ms_1.default)('25s')));
114
114
  };
115
115
  const handleMessage = async (data) => {
116
- var _a, _b;
117
- const messageStr = data.toString();
118
- // Handle PONG messages that might be sent to message handler during handler reattachment
119
- if (messageStr === 'PONG') {
120
- return;
121
- }
122
- let events = [];
116
+ var _a, _b, _c;
123
117
  try {
124
- const parsedData = JSON.parse(messageStr);
125
- events = Array.isArray(parsedData) ? parsedData : [parsedData];
126
- }
127
- catch (err) {
128
- await ((_a = handlers.onError) === null || _a === void 0 ? void 0 : _a.call(handlers, new Error(`Not JSON: ${messageStr}`)));
129
- return;
130
- }
131
- // Filter events to ensure validity
132
- events = lodash_1.default.filter(events, (event) => {
133
- // For price_change events, check that price_changes array exists
134
- if ((0, PolymarketWebSocket_1.isPriceChangeEvent)(event)) {
135
- return event.price_changes && event.price_changes.length > 0;
118
+ const messageStr = data.toString();
119
+ // Handle PONG messages that might be sent to message handler during handler reattachment
120
+ if (messageStr === 'PONG') {
121
+ return;
136
122
  }
137
- // For all other events, check asset_id
138
- return lodash_1.default.size(event.asset_id) > 0;
139
- });
140
- const bookEvents = [];
141
- const lastTradeEvents = [];
142
- const tickEvents = [];
143
- const priceChangeEvents = [];
144
- for (const event of events) {
145
- /*
146
- Skip events for asset ids that are not in the group to ensure that
147
- we don't get stale events for assets that were removed.
148
- */
149
- if ((0, PolymarketWebSocket_1.isPriceChangeEvent)(event)) {
150
- // Check if any of the price_changes are for assets in this group
151
- const relevantChanges = event.price_changes.filter(price_change_item => group.assetIds.has(price_change_item.asset_id));
152
- if (relevantChanges.length === 0) {
153
- continue;
154
- }
155
- // Only include relevant changes
156
- priceChangeEvents.push({
157
- ...event,
158
- price_changes: relevantChanges
159
- });
123
+ let events = [];
124
+ try {
125
+ const parsedData = JSON.parse(messageStr);
126
+ events = Array.isArray(parsedData) ? parsedData : [parsedData];
160
127
  }
161
- else {
162
- // For all other events, check asset_id at root
163
- if (!group.assetIds.has(event.asset_id)) {
164
- continue;
165
- }
166
- if ((0, PolymarketWebSocket_1.isBookEvent)(event)) {
167
- bookEvents.push(event);
128
+ catch (err) {
129
+ await ((_a = handlers.onError) === null || _a === void 0 ? void 0 : _a.call(handlers, new Error(`Not JSON: ${messageStr}`)));
130
+ return;
131
+ }
132
+ // Filter events to ensure validity
133
+ events = lodash_1.default.filter(events, (event) => {
134
+ if (!event) {
135
+ return false;
168
136
  }
169
- else if ((0, PolymarketWebSocket_1.isLastTradePriceEvent)(event)) {
170
- lastTradeEvents.push(event);
137
+ // For price_change events, check that price_changes array exists
138
+ if ((0, PolymarketWebSocket_1.isPriceChangeEvent)(event)) {
139
+ return event.price_changes && event.price_changes.length > 0;
171
140
  }
172
- else if ((0, PolymarketWebSocket_1.isTickSizeChangeEvent)(event)) {
173
- tickEvents.push(event);
141
+ // For all other events, check asset_id
142
+ return lodash_1.default.size(event.asset_id) > 0;
143
+ });
144
+ const bookEvents = [];
145
+ const lastTradeEvents = [];
146
+ const tickEvents = [];
147
+ const priceChangeEvents = [];
148
+ for (const event of events) {
149
+ /*
150
+ Skip events for asset ids that are not in the group to ensure that
151
+ we don't get stale events for assets that were removed.
152
+ */
153
+ if ((0, PolymarketWebSocket_1.isPriceChangeEvent)(event)) {
154
+ // Check if any of the price_changes are for assets in this group
155
+ const relevantChanges = event.price_changes.filter(price_change_item => group.assetIds.has(price_change_item.asset_id));
156
+ if (relevantChanges.length === 0) {
157
+ continue;
158
+ }
159
+ // Only include relevant changes
160
+ priceChangeEvents.push({
161
+ ...event,
162
+ price_changes: relevantChanges
163
+ });
174
164
  }
175
165
  else {
176
- await ((_b = handlers.onError) === null || _b === void 0 ? void 0 : _b.call(handlers, new Error(`Unknown event: ${JSON.stringify(event)}`)));
166
+ // For all other events, check asset_id at root
167
+ if (!group.assetIds.has(event.asset_id)) {
168
+ continue;
169
+ }
170
+ if ((0, PolymarketWebSocket_1.isBookEvent)(event)) {
171
+ bookEvents.push(event);
172
+ }
173
+ else if ((0, PolymarketWebSocket_1.isLastTradePriceEvent)(event)) {
174
+ lastTradeEvents.push(event);
175
+ }
176
+ else if ((0, PolymarketWebSocket_1.isTickSizeChangeEvent)(event)) {
177
+ tickEvents.push(event);
178
+ }
179
+ else {
180
+ await ((_b = handlers.onError) === null || _b === void 0 ? void 0 : _b.call(handlers, new Error(`Unknown event: ${JSON.stringify(event)}`)));
181
+ }
177
182
  }
178
183
  }
184
+ await this.handleBookEvents(bookEvents);
185
+ await this.handleTickEvents(tickEvents);
186
+ await this.handlePriceChangeEvents(priceChangeEvents);
187
+ await this.handleLastTradeEvents(lastTradeEvents);
188
+ }
189
+ catch (err) {
190
+ // handler-wide error handling
191
+ await ((_c = handlers.onError) === null || _c === void 0 ? void 0 : _c.call(handlers, new Error(`Error handling message: ${err}`)));
179
192
  }
180
- await this.handleBookEvents(bookEvents);
181
- await this.handleTickEvents(tickEvents);
182
- await this.handlePriceChangeEvents(priceChangeEvents);
183
- await this.handleLastTradeEvents(lastTradeEvents);
184
193
  };
185
194
  const handlePong = () => {
186
195
  group.groupId;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nevuamarkets/poly-websockets",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Plug-and-play Polymarket WebSocket price alerts",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -137,75 +137,83 @@ export class GroupSocket {
137
137
  };
138
138
 
139
139
  const handleMessage = async (data: Buffer) => {
140
- const messageStr = data.toString();
141
-
142
- // Handle PONG messages that might be sent to message handler during handler reattachment
143
- if (messageStr === 'PONG') {
144
- return;
145
- }
146
-
147
- let events: PolymarketWSEvent[] = [];
148
140
  try {
149
- const parsedData: any = JSON.parse(messageStr);
150
- events = Array.isArray(parsedData) ? parsedData : [parsedData];
151
- } catch (err) {
152
- await handlers.onError?.(new Error(`Not JSON: ${messageStr}`));
153
- return;
154
- }
141
+ const messageStr = data.toString();
155
142
 
156
- // Filter events to ensure validity
157
- events = _.filter(events, (event: PolymarketWSEvent) => {
158
- // For price_change events, check that price_changes array exists
159
- if (isPriceChangeEvent(event)) {
160
- return event.price_changes && event.price_changes.length > 0;
143
+ // Handle PONG messages that might be sent to message handler during handler reattachment
144
+ if (messageStr === 'PONG') {
145
+ return;
161
146
  }
162
- // For all other events, check asset_id
163
- return _.size(event.asset_id) > 0;
164
- });
165
147
 
166
- const bookEvents: BookEvent[] = [];
167
- const lastTradeEvents: LastTradePriceEvent[] = [];
168
- const tickEvents: TickSizeChangeEvent[] = [];
169
- const priceChangeEvents: PriceChangeEvent[] = [];
148
+ let events: PolymarketWSEvent[] = [];
149
+ try {
150
+ const parsedData: any = JSON.parse(messageStr);
151
+ events = Array.isArray(parsedData) ? parsedData : [parsedData];
152
+ } catch (err) {
153
+ await handlers.onError?.(new Error(`Not JSON: ${messageStr}`));
154
+ return;
155
+ }
170
156
 
171
- for (const event of events) {
172
- /*
173
- Skip events for asset ids that are not in the group to ensure that
174
- we don't get stale events for assets that were removed.
175
- */
176
- if (isPriceChangeEvent(event)) {
177
- // Check if any of the price_changes are for assets in this group
178
- const relevantChanges = event.price_changes.filter(price_change_item => group.assetIds.has(price_change_item.asset_id));
179
- if (relevantChanges.length === 0) {
180
- continue;
157
+ // Filter events to ensure validity
158
+ events = _.filter(events, (event: PolymarketWSEvent) => {
159
+ if (!event) {
160
+ return false;
181
161
  }
182
- // Only include relevant changes
183
- priceChangeEvents.push({
184
- ...event,
185
- price_changes: relevantChanges
186
- });
187
- } else {
188
- // For all other events, check asset_id at root
189
- if (!group.assetIds.has(event.asset_id!)) {
190
- continue;
162
+ // For price_change events, check that price_changes array exists
163
+ if (isPriceChangeEvent(event)) {
164
+ return event.price_changes && event.price_changes.length > 0;
191
165
  }
166
+ // For all other events, check asset_id
167
+ return _.size(event.asset_id) > 0;
168
+ });
192
169
 
193
- if (isBookEvent(event)) {
194
- bookEvents.push(event);
195
- } else if (isLastTradePriceEvent(event)) {
196
- lastTradeEvents.push(event);
197
- } else if (isTickSizeChangeEvent(event)) {
198
- tickEvents.push(event);
170
+ const bookEvents: BookEvent[] = [];
171
+ const lastTradeEvents: LastTradePriceEvent[] = [];
172
+ const tickEvents: TickSizeChangeEvent[] = [];
173
+ const priceChangeEvents: PriceChangeEvent[] = [];
174
+
175
+ for (const event of events) {
176
+ /*
177
+ Skip events for asset ids that are not in the group to ensure that
178
+ we don't get stale events for assets that were removed.
179
+ */
180
+ if (isPriceChangeEvent(event)) {
181
+ // Check if any of the price_changes are for assets in this group
182
+ const relevantChanges = event.price_changes.filter(price_change_item => group.assetIds.has(price_change_item.asset_id));
183
+ if (relevantChanges.length === 0) {
184
+ continue;
185
+ }
186
+ // Only include relevant changes
187
+ priceChangeEvents.push({
188
+ ...event,
189
+ price_changes: relevantChanges
190
+ });
199
191
  } else {
200
- await handlers.onError?.(new Error(`Unknown event: ${JSON.stringify(event)}`));
192
+ // For all other events, check asset_id at root
193
+ if (!group.assetIds.has(event.asset_id!)) {
194
+ continue;
195
+ }
196
+
197
+ if (isBookEvent(event)) {
198
+ bookEvents.push(event);
199
+ } else if (isLastTradePriceEvent(event)) {
200
+ lastTradeEvents.push(event);
201
+ } else if (isTickSizeChangeEvent(event)) {
202
+ tickEvents.push(event);
203
+ } else {
204
+ await handlers.onError?.(new Error(`Unknown event: ${JSON.stringify(event)}`));
205
+ }
201
206
  }
202
207
  }
203
- }
204
208
 
205
- await this.handleBookEvents(bookEvents);
206
- await this.handleTickEvents(tickEvents);
207
- await this.handlePriceChangeEvents(priceChangeEvents);
208
- await this.handleLastTradeEvents(lastTradeEvents);
209
+ await this.handleBookEvents(bookEvents);
210
+ await this.handleTickEvents(tickEvents);
211
+ await this.handlePriceChangeEvents(priceChangeEvents);
212
+ await this.handleLastTradeEvents(lastTradeEvents);
213
+ } catch (err) {
214
+ // handler-wide error handling
215
+ await handlers.onError?.(new Error(`Error handling message: ${err}`));
216
+ }
209
217
  };
210
218
 
211
219
  const handlePong = () => {