@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.
@@ -840,8 +840,8 @@ const Protocol = {
840
840
  if (messageData.user_id) {
841
841
  pusherEvent.user_id = messageData.user_id;
842
842
  }
843
- const sequence = messageData.__delta_seq ?? messageData.sequence;
844
- const conflationKey = messageData.__conflation_key ?? messageData.conflation_key;
843
+ const sequence = messageData.seq;
844
+ const conflationKey = messageData.conflation_key;
845
845
  if (typeof sequence === "number") {
846
846
  pusherEvent.sequence = sequence;
847
847
  }
@@ -3959,20 +3959,24 @@ class DeltaCompressionManager {
3959
3959
  deltaSize: deltaBytes.length,
3960
3960
  compressionRatio: (deltaBytes.length / reconstructedMessage.length * 100).toFixed(1) + "%"
3961
3961
  });
3962
+ let reconstructedData;
3962
3963
  try {
3963
- const parsedMessage = JSON.parse(reconstructedMessage);
3964
- return {
3965
- event,
3964
+ reconstructedData = JSON.parse(JSON.parse(reconstructedMessage));
3965
+ } catch (parseError) {
3966
+ this.error("Failed to parse reconstructed message as JSON", {
3966
3967
  channel,
3967
- data: parsedMessage.data || parsedMessage
3968
- };
3969
- } catch (e) {
3970
- return {
3971
3968
  event,
3972
- channel,
3973
- data: reconstructedMessage
3974
- };
3969
+ sequence,
3970
+ parseError: parseError.message,
3971
+ reconstructedMessageLength: reconstructedMessage.length
3972
+ });
3973
+ reconstructedData = reconstructedMessage;
3975
3974
  }
3975
+ return {
3976
+ event,
3977
+ channel,
3978
+ data: reconstructedData
3979
+ };
3976
3980
  } catch (error) {
3977
3981
  this.error("Delta decode failed", {
3978
3982
  channel,
@@ -3993,10 +3997,19 @@ class DeltaCompressionManager {
3993
3997
  * Handle regular (full) message with delta sequence markers
3994
3998
  */
3995
3999
  handleFullMessage(channel, rawMessage, sequence, conflationKey) {
4000
+ let parsedMessage;
4001
+ try {
4002
+ parsedMessage = JSON.parse(rawMessage);
4003
+ } catch (e) {
4004
+ this.log("handleFullMessage parse failed", {
4005
+ channel,
4006
+ hasSequence: sequence === 0 || !!sequence
4007
+ });
4008
+ return;
4009
+ }
3996
4010
  if (!sequence && sequence !== 0) {
3997
4011
  try {
3998
- const parsed = JSON.parse(rawMessage);
3999
- const candidate = typeof parsed.data === "string" ? JSON.parse(parsed.data).__delta_seq ?? parsed.__delta_seq : parsed.data?.__delta_seq ?? parsed.__delta_seq;
4012
+ const candidate = typeof parsedMessage.data === "string" ? JSON.parse(parsedMessage.data).__delta_seq ?? parsedMessage.__delta_seq : parsedMessage.data?.__delta_seq ?? parsedMessage.__delta_seq;
4000
4013
  if (candidate === 0 || candidate) {
4001
4014
  sequence = candidate;
4002
4015
  } else {
@@ -4014,7 +4027,22 @@ class DeltaCompressionManager {
4014
4027
  return;
4015
4028
  }
4016
4029
  }
4017
- const messageSize = rawMessage.length;
4030
+ if (parsedMessage?.data === void 0) {
4031
+ this.log("handleFullMessage missing data field, skipping", {
4032
+ channel,
4033
+ hasSequence: sequence === 0 || !!sequence
4034
+ });
4035
+ return;
4036
+ }
4037
+ const baseMessage = JSON.stringify(parsedMessage.data);
4038
+ if (typeof baseMessage !== "string") {
4039
+ this.log("handleFullMessage base serialization failed, skipping", {
4040
+ channel,
4041
+ hasSequence: sequence === 0 || !!sequence
4042
+ });
4043
+ return;
4044
+ }
4045
+ const messageSize = baseMessage.length;
4018
4046
  let channelState = this.channelStates.get(channel);
4019
4047
  if (!channelState) {
4020
4048
  channelState = new ChannelState(channel);
@@ -4027,8 +4055,7 @@ class DeltaCompressionManager {
4027
4055
  if (channelState.conflationKey && finalConflationKey !== void 0) {
4028
4056
  channelState.updateConflationCache(
4029
4057
  finalConflationKey,
4030
- rawMessage,
4031
- // Store raw message directly
4058
+ baseMessage,
4032
4059
  sequence
4033
4060
  );
4034
4061
  this.log("Stored full message (conflation)", {
@@ -4038,7 +4065,7 @@ class DeltaCompressionManager {
4038
4065
  size: messageSize
4039
4066
  });
4040
4067
  } else {
4041
- channelState.setBase(rawMessage, sequence);
4068
+ channelState.setBase(baseMessage, sequence);
4042
4069
  this.log("Stored full message", {
4043
4070
  channel,
4044
4071
  sequence,
@@ -4280,22 +4307,10 @@ class Pusher {
4280
4307
  if (typeof event.conflation_key === "string") {
4281
4308
  conflationKey = event.conflation_key;
4282
4309
  }
4283
- let fullMessage = event.rawMessage || "";
4284
- if (fullMessage && sequence !== void 0) {
4285
- fullMessage = fullMessage.replace(/,"__delta_seq":\d+/g, "");
4286
- fullMessage = fullMessage.replace(/"__delta_seq":\d+,/g, "");
4287
- fullMessage = fullMessage.replace(
4288
- /,"__conflation_key":"[^"]*"/g,
4289
- ""
4290
- );
4291
- fullMessage = fullMessage.replace(
4292
- /"__conflation_key":"[^"]*",/g,
4293
- ""
4294
- );
4295
- }
4310
+ const rawMessage = event.rawMessage || "";
4296
4311
  this.deltaCompression.handleFullMessage(
4297
4312
  event.channel,
4298
- fullMessage,
4313
+ rawMessage,
4299
4314
  sequence,
4300
4315
  conflationKey
4301
4316
  );