@cendarsoss/pusher-js 8.4.15 → 8.4.17

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.
@@ -1296,8 +1296,8 @@ const Protocol = {
1296
1296
  if (messageData.user_id) {
1297
1297
  pusherEvent.user_id = messageData.user_id;
1298
1298
  }
1299
- const sequence = messageData.__delta_seq ?? messageData.sequence;
1300
- const conflationKey = messageData.__conflation_key ?? messageData.conflation_key;
1299
+ const sequence = messageData.seq;
1300
+ const conflationKey = messageData.conflation_key;
1301
1301
  if (typeof sequence === "number") {
1302
1302
  pusherEvent.sequence = sequence;
1303
1303
  }
@@ -5425,20 +5425,24 @@ class DeltaCompressionManager {
5425
5425
  deltaSize: deltaBytes.length,
5426
5426
  compressionRatio: (deltaBytes.length / reconstructedMessage.length * 100).toFixed(1) + "%"
5427
5427
  });
5428
+ let reconstructedData;
5428
5429
  try {
5429
- const parsedMessage = JSON.parse(reconstructedMessage);
5430
- return {
5431
- event,
5430
+ reconstructedData = JSON.parse(JSON.parse(reconstructedMessage));
5431
+ } catch (parseError) {
5432
+ this.error("Failed to parse reconstructed message as JSON", {
5432
5433
  channel,
5433
- data: parsedMessage.data || parsedMessage
5434
- };
5435
- } catch (e) {
5436
- return {
5437
5434
  event,
5438
- channel,
5439
- data: reconstructedMessage
5440
- };
5435
+ sequence,
5436
+ parseError: parseError.message,
5437
+ reconstructedMessageLength: reconstructedMessage.length
5438
+ });
5439
+ reconstructedData = reconstructedMessage;
5441
5440
  }
5441
+ return {
5442
+ event,
5443
+ channel,
5444
+ data: reconstructedData
5445
+ };
5442
5446
  } catch (error) {
5443
5447
  this.error("Delta decode failed", {
5444
5448
  channel,
@@ -5459,10 +5463,19 @@ class DeltaCompressionManager {
5459
5463
  * Handle regular (full) message with delta sequence markers
5460
5464
  */
5461
5465
  handleFullMessage(channel, rawMessage, sequence, conflationKey) {
5466
+ let parsedMessage;
5467
+ try {
5468
+ parsedMessage = JSON.parse(rawMessage);
5469
+ } catch (e) {
5470
+ this.log("handleFullMessage parse failed", {
5471
+ channel,
5472
+ hasSequence: sequence === 0 || !!sequence
5473
+ });
5474
+ return;
5475
+ }
5462
5476
  if (!sequence && sequence !== 0) {
5463
5477
  try {
5464
- const parsed = JSON.parse(rawMessage);
5465
- const candidate = typeof parsed.data === "string" ? JSON.parse(parsed.data).__delta_seq ?? parsed.__delta_seq : parsed.data?.__delta_seq ?? parsed.__delta_seq;
5478
+ const candidate = typeof parsedMessage.data === "string" ? JSON.parse(parsedMessage.data).__delta_seq ?? parsedMessage.__delta_seq : parsedMessage.data?.__delta_seq ?? parsedMessage.__delta_seq;
5466
5479
  if (candidate === 0 || candidate) {
5467
5480
  sequence = candidate;
5468
5481
  } else {
@@ -5480,7 +5493,22 @@ class DeltaCompressionManager {
5480
5493
  return;
5481
5494
  }
5482
5495
  }
5483
- const messageSize = rawMessage.length;
5496
+ if (parsedMessage?.data === void 0) {
5497
+ this.log("handleFullMessage missing data field, skipping", {
5498
+ channel,
5499
+ hasSequence: sequence === 0 || !!sequence
5500
+ });
5501
+ return;
5502
+ }
5503
+ const baseMessage = JSON.stringify(parsedMessage.data);
5504
+ if (typeof baseMessage !== "string") {
5505
+ this.log("handleFullMessage base serialization failed, skipping", {
5506
+ channel,
5507
+ hasSequence: sequence === 0 || !!sequence
5508
+ });
5509
+ return;
5510
+ }
5511
+ const messageSize = baseMessage.length;
5484
5512
  let channelState = this.channelStates.get(channel);
5485
5513
  if (!channelState) {
5486
5514
  channelState = new ChannelState(channel);
@@ -5493,8 +5521,7 @@ class DeltaCompressionManager {
5493
5521
  if (channelState.conflationKey && finalConflationKey !== void 0) {
5494
5522
  channelState.updateConflationCache(
5495
5523
  finalConflationKey,
5496
- rawMessage,
5497
- // Store raw message directly
5524
+ baseMessage,
5498
5525
  sequence
5499
5526
  );
5500
5527
  this.log("Stored full message (conflation)", {
@@ -5504,7 +5531,7 @@ class DeltaCompressionManager {
5504
5531
  size: messageSize
5505
5532
  });
5506
5533
  } else {
5507
- channelState.setBase(rawMessage, sequence);
5534
+ channelState.setBase(baseMessage, sequence);
5508
5535
  this.log("Stored full message", {
5509
5536
  channel,
5510
5537
  sequence,
@@ -5725,22 +5752,10 @@ const _Pusher = class _Pusher {
5725
5752
  if (typeof event.conflation_key === "string") {
5726
5753
  conflationKey = event.conflation_key;
5727
5754
  }
5728
- let fullMessage = event.rawMessage || "";
5729
- if (fullMessage && sequence !== void 0) {
5730
- fullMessage = fullMessage.replace(/,"__delta_seq":\d+/g, "");
5731
- fullMessage = fullMessage.replace(/"__delta_seq":\d+,/g, "");
5732
- fullMessage = fullMessage.replace(
5733
- /,"__conflation_key":"[^"]*"/g,
5734
- ""
5735
- );
5736
- fullMessage = fullMessage.replace(
5737
- /"__conflation_key":"[^"]*",/g,
5738
- ""
5739
- );
5740
- }
5755
+ const rawMessage = event.rawMessage || "";
5741
5756
  this.deltaCompression.handleFullMessage(
5742
5757
  event.channel,
5743
- fullMessage,
5758
+ rawMessage,
5744
5759
  sequence,
5745
5760
  conflationKey
5746
5761
  );