66 "fmt"
77)
88
9- // maxEventPayloadSize indicates the max size allowed for the data content (payload) of each event
10- const maxEventPayloadSize = 20480 // on dedicated clusters we may allow 2x the usual limit
9+ // defaultMaxEventPayloadSizeKB indicates the max size allowed for the data content
10+ // (payload) of each event, unless an override is present in the client
11+ const defaultMaxEventPayloadSizeKB = 10
1112
1213type batchEvent struct {
1314 Channel string `json:"channel"`
@@ -26,7 +27,14 @@ type eventPayload struct {
2627 SocketID * string `json:"socket_id,omitempty"`
2728}
2829
29- func encodeTriggerBody (channels []string , event string , data interface {}, socketID * string , encryptionKey []byte ) ([]byte , error ) {
30+ func encodeTriggerBody (
31+ channels []string ,
32+ event string ,
33+ data interface {},
34+ socketID * string ,
35+ encryptionKey []byte ,
36+ overrideMaxMessagePayloadKB int ,
37+ ) ([]byte , error ) {
3038 dataBytes , err := encodeEventData (data )
3139 if err != nil {
3240 return nil , err
@@ -37,7 +45,14 @@ func encodeTriggerBody(channels []string, event string, data interface{}, socket
3745 } else {
3846 payloadData = string (dataBytes )
3947 }
40- if len (payloadData ) > maxEventPayloadSize {
48+
49+ eventExceedsMaximumSize := false
50+ if overrideMaxMessagePayloadKB == 0 {
51+ eventExceedsMaximumSize = len (payloadData ) > defaultMaxEventPayloadSizeKB * 1024
52+ } else {
53+ eventExceedsMaximumSize = len (payloadData ) > overrideMaxMessagePayloadKB * 1024
54+ }
55+ if eventExceedsMaximumSize {
4156 return nil , errors .New (fmt .Sprintf ("Event payload exceeded maximum size (%d bytes is too much)" , len (payloadData )))
4257 }
4358 return json .Marshal (& eventPayload {
@@ -48,7 +63,11 @@ func encodeTriggerBody(channels []string, event string, data interface{}, socket
4863 })
4964}
5065
51- func encodeTriggerBatchBody (batch []Event , encryptionKey []byte ) ([]byte , error ) {
66+ func encodeTriggerBatchBody (
67+ batch []Event ,
68+ encryptionKey []byte ,
69+ overrideMaxMessagePayloadKB int ,
70+ ) ([]byte , error ) {
5271 batchEvents := make ([]batchEvent , len (batch ))
5372 for idx , e := range batch {
5473 var stringifyedDataBytes string
@@ -61,8 +80,14 @@ func encodeTriggerBatchBody(batch []Event, encryptionKey []byte) ([]byte, error)
6180 } else {
6281 stringifyedDataBytes = string (dataBytes )
6382 }
64- if len (stringifyedDataBytes ) > maxEventPayloadSize {
65- return nil , fmt .Errorf ("Data of the event #%d in batch, must be smaller than 10kb" , idx )
83+ eventExceedsMaximumSize := false
84+ if overrideMaxMessagePayloadKB == 0 {
85+ eventExceedsMaximumSize = len (stringifyedDataBytes ) > defaultMaxEventPayloadSizeKB * 1024
86+ } else {
87+ eventExceedsMaximumSize = len (stringifyedDataBytes ) > overrideMaxMessagePayloadKB * 1024
88+ }
89+ if eventExceedsMaximumSize {
90+ return nil , fmt .Errorf ("Data of the event #%d in batch, exceeded maximum size (%d bytes is too much)" , idx , len (stringifyedDataBytes ))
6691 }
6792 newBatchEvent := batchEvent {
6893 Channel : e .Channel ,
0 commit comments