@cendarsoss/pusher-js 8.4.16 → 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,27 +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
- let data = parsedMessage.data || parsedMessage;
3965
- if (typeof data === "string") {
3966
- try {
3967
- data = JSON.parse(data);
3968
- } catch (e) {
3969
- }
3970
- }
3971
- return {
3972
- event,
3964
+ reconstructedData = JSON.parse(JSON.parse(reconstructedMessage));
3965
+ } catch (parseError) {
3966
+ this.error("Failed to parse reconstructed message as JSON", {
3973
3967
  channel,
3974
- data
3975
- };
3976
- } catch (e) {
3977
- return {
3978
3968
  event,
3979
- channel,
3980
- data: reconstructedMessage
3981
- };
3969
+ sequence,
3970
+ parseError: parseError.message,
3971
+ reconstructedMessageLength: reconstructedMessage.length
3972
+ });
3973
+ reconstructedData = reconstructedMessage;
3982
3974
  }
3975
+ return {
3976
+ event,
3977
+ channel,
3978
+ data: reconstructedData
3979
+ };
3983
3980
  } catch (error) {
3984
3981
  this.error("Delta decode failed", {
3985
3982
  channel,
@@ -4000,10 +3997,19 @@ class DeltaCompressionManager {
4000
3997
  * Handle regular (full) message with delta sequence markers
4001
3998
  */
4002
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
+ }
4003
4010
  if (!sequence && sequence !== 0) {
4004
4011
  try {
4005
- const parsed = JSON.parse(rawMessage);
4006
- 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;
4007
4013
  if (candidate === 0 || candidate) {
4008
4014
  sequence = candidate;
4009
4015
  } else {
@@ -4021,7 +4027,22 @@ class DeltaCompressionManager {
4021
4027
  return;
4022
4028
  }
4023
4029
  }
4024
- 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;
4025
4046
  let channelState = this.channelStates.get(channel);
4026
4047
  if (!channelState) {
4027
4048
  channelState = new ChannelState(channel);
@@ -4034,8 +4055,7 @@ class DeltaCompressionManager {
4034
4055
  if (channelState.conflationKey && finalConflationKey !== void 0) {
4035
4056
  channelState.updateConflationCache(
4036
4057
  finalConflationKey,
4037
- rawMessage,
4038
- // Store raw message directly
4058
+ baseMessage,
4039
4059
  sequence
4040
4060
  );
4041
4061
  this.log("Stored full message (conflation)", {
@@ -4045,7 +4065,7 @@ class DeltaCompressionManager {
4045
4065
  size: messageSize
4046
4066
  });
4047
4067
  } else {
4048
- channelState.setBase(rawMessage, sequence);
4068
+ channelState.setBase(baseMessage, sequence);
4049
4069
  this.log("Stored full message", {
4050
4070
  channel,
4051
4071
  sequence,
@@ -4287,22 +4307,10 @@ class Pusher {
4287
4307
  if (typeof event.conflation_key === "string") {
4288
4308
  conflationKey = event.conflation_key;
4289
4309
  }
4290
- let fullMessage = event.rawMessage || "";
4291
- if (fullMessage && sequence !== void 0) {
4292
- fullMessage = fullMessage.replace(/,"__delta_seq":\d+/g, "");
4293
- fullMessage = fullMessage.replace(/"__delta_seq":\d+,/g, "");
4294
- fullMessage = fullMessage.replace(
4295
- /,"__conflation_key":"[^"]*"/g,
4296
- ""
4297
- );
4298
- fullMessage = fullMessage.replace(
4299
- /"__conflation_key":"[^"]*",/g,
4300
- ""
4301
- );
4302
- }
4310
+ const rawMessage = event.rawMessage || "";
4303
4311
  this.deltaCompression.handleFullMessage(
4304
4312
  event.channel,
4305
- fullMessage,
4313
+ rawMessage,
4306
4314
  sequence,
4307
4315
  conflationKey
4308
4316
  );