@@ -90,15 +90,15 @@ public struct RealtimeChannelOptions {
90
90
}
91
91
92
92
/// Parameters used to configure the channel
93
- var params : [ String : [ String : Any ] ] {
93
+ var params : [ String : AnyJSON ] {
94
94
[
95
95
" config " : [
96
96
" presence " : [
97
- " key " : presenceKey ?? " " ,
97
+ " key " : . string ( presenceKey ?? " " ) ,
98
98
] ,
99
99
" broadcast " : [
100
- " ack " : broadcastAcknowledge,
101
- " self " : broadcastSelf,
100
+ " ack " : . bool ( broadcastAcknowledge) ,
101
+ " self " : . bool ( broadcastSelf) ,
102
102
] ,
103
103
] ,
104
104
]
@@ -185,7 +185,7 @@ public class RealtimeChannel {
185
185
/// - parameter topic: Topic of the RealtimeChannel
186
186
/// - parameter params: Optional. Parameters to send when joining.
187
187
/// - parameter socket: Socket that the channel is a part of
188
- init ( topic: String , params: [ String : Any ] = [ : ] , socket: RealtimeClient ) {
188
+ init ( topic: String , params: [ String : AnyJSON ] = [ : ] , socket: RealtimeClient ) {
189
189
state = ChannelState . closed
190
190
self . topic = topic
191
191
subTopic = topic. replacingOccurrences ( of: " realtime: " , with: " " )
@@ -381,22 +381,27 @@ public class RealtimeChannel {
381
381
self . timeout = safeTimeout
382
382
}
383
383
384
- let broadcast = ( params [ " config " ] as? [ String : any Sendable ] ) ? [ " broadcast " ]
385
- let presence = ( params [ " config " ] as? [ String : any Sendable ] ) ? [ " presence " ]
384
+ let broadcast = params [ " config " ] ? . objectValue ? [ " broadcast " ]
385
+ let presence = params [ " config " ] ? . objectValue ? [ " presence " ]
386
386
387
387
var accessTokenPayload : Payload = [ : ]
388
+
388
389
var config : Payload = [
389
- " postgres_changes " : bindings [ " postgres_changes " ] ? . map ( \. filter) ?? [ ] ,
390
+ " postgres_changes " : . array(
391
+ ( bindings [ " postgres_changes " ] ? . map ( \. filter) ?? [ ] ) . map { filter in
392
+ AnyJSON . object ( filter. mapValues ( AnyJSON . string) )
393
+ }
394
+ ) ,
390
395
]
391
396
392
397
config [ " broadcast " ] = broadcast
393
398
config [ " presence " ] = presence
394
399
395
400
if let accessToken = socket? . accessToken {
396
- accessTokenPayload [ " access_token " ] = accessToken
401
+ accessTokenPayload [ " access_token " ] = . string ( accessToken)
397
402
}
398
403
399
- params [ " config " ] = config
404
+ params [ " config " ] = . object ( config)
400
405
401
406
joinedOnce = true
402
407
rejoin ( )
@@ -411,8 +416,8 @@ public class RealtimeChannel {
411
416
self . socket? . setAuth ( self . socket? . accessToken)
412
417
}
413
418
414
- guard let serverPostgresFilters = message
415
- . payload [ " postgres_changes " ] as? [ [ String : any Sendable ] ]
419
+ guard let serverPostgresFilters = message. payload [ " postgres_changes " ] ? . arrayValue ?
420
+ . compactMap ( \ . objectValue )
416
421
else {
417
422
callback ? ( . subscribed, nil )
418
423
return
@@ -432,17 +437,17 @@ public class RealtimeChannel {
432
437
433
438
let serverPostgresFilter = serverPostgresFilters [ i]
434
439
435
- if serverPostgresFilter [ " event " ] as? String == event,
436
- serverPostgresFilter [ " schema " ] as? String == schema,
437
- serverPostgresFilter [ " table " ] as? String == table,
438
- serverPostgresFilter [ " filter " ] as? String == filter
440
+ if serverPostgresFilter [ " event " ] ? . stringValue == event,
441
+ serverPostgresFilter [ " schema " ] ? . stringValue == schema,
442
+ serverPostgresFilter [ " table " ] ? . stringValue == table,
443
+ serverPostgresFilter [ " filter " ] ? . stringValue == filter
439
444
{
440
445
newPostgresBindings. append (
441
446
Binding (
442
447
type: clientPostgresBinding. type,
443
448
filter: clientPostgresBinding. filter,
444
449
callback: clientPostgresBinding. callback,
445
- id: ( serverPostgresFilter [ " id " ] as? Int ) . flatMap ( String . init)
450
+ id: serverPostgresFilter [ " id " ] ? . numberValue . map { Int ( $0 ) } . flatMap ( String . init)
446
451
)
447
452
)
448
453
} else {
@@ -481,7 +486,7 @@ public class RealtimeChannel {
481
486
type: . presence,
482
487
payload: [
483
488
" event " : " track " ,
484
- " payload " : payload,
489
+ " payload " : . object ( payload) ,
485
490
] ,
486
491
opts: opts
487
492
)
@@ -643,9 +648,9 @@ public class RealtimeChannel {
643
648
opts: Payload = [ : ]
644
649
) async -> ChannelResponse {
645
650
var payload = payload
646
- payload [ " type " ] = type. rawValue
651
+ payload [ " type " ] = . string ( type. rawValue)
647
652
if let event {
648
- payload [ " event " ] = event
653
+ payload [ " event " ] = . string ( event)
649
654
}
650
655
651
656
if !canPush, type == . broadcast {
@@ -681,14 +686,14 @@ public class RealtimeChannel {
681
686
return await withCheckedContinuation { continuation in
682
687
let push = self . push (
683
688
type. rawValue, payload: payload,
684
- timeout: ( opts [ " timeout " ] as? TimeInterval ) ?? self . timeout
689
+ timeout: opts [ " timeout " ] ? . numberValue ?? self . timeout
685
690
)
686
691
687
- if let type = payload [ " type " ] as? String , type == " broadcast " ,
688
- let config = self . params [ " config " ] as? [ String : any Sendable ] ,
689
- let broadcast = config [ " broadcast " ] as? [ String : any Sendable ]
692
+ if let type = payload [ " type " ] ? . stringValue , type == " broadcast " ,
693
+ let config = self . params [ " config " ] ? . objectValue ,
694
+ let broadcast = config [ " broadcast " ] ? . objectValue
690
695
{
691
- let ack = broadcast [ " ack " ] as? Bool
696
+ let ack = broadcast [ " ack " ] ? . boolValue
692
697
if ack == nil || ack == false {
693
698
continuation. resume ( returning: . ok)
694
699
return
@@ -848,13 +853,14 @@ public class RealtimeChannel {
848
853
let bindEvent = bind. filter [ " event " ] ? . lowercased ( )
849
854
850
855
if let bindId = bind. id. flatMap ( Int . init) {
851
- let ids = message. payload [ " ids " ] as? [ Int ] ?? [ ]
852
- let data = message. payload [ " data " ] as? [ String : any Sendable ] ?? [ : ]
853
- let type = data [ " type " ] as? String
856
+ let ids = ( message. payload [ " ids " ] ? . arrayValue ?? [ ] ) . compactMap ( \. numberValue)
857
+ . map ( Int . init)
858
+ let data = message. payload [ " data " ] ? . objectValue ?? [ : ]
859
+ let type = data [ " type " ] ? . stringValue
854
860
return ids. contains ( bindId) && ( bindEvent == " * " || bindEvent == type? . lowercased ( ) )
855
861
}
856
862
857
- let messageEvent = message. payload [ " event " ] as? String
863
+ let messageEvent = message. payload [ " event " ] ? . stringValue
858
864
return bindEvent == " * " || bindEvent == messageEvent? . lowercased ( )
859
865
}
860
866
0 commit comments