1
1
package com.pubnub.api
2
2
3
+ import cocoapods.PubNubSwift.KMPPAMPermission
4
+ import cocoapods.PubNubSwift.KMPPAMTokenResource
3
5
import cocoapods.PubNubSwift.KMPPubNub
4
6
import cocoapods.PubNubSwift.KMPSubscription
5
7
import cocoapods.PubNubSwift.KMPSubscriptionSet
@@ -10,6 +12,7 @@ import cocoapods.PubNubSwift.channelMetadataWith
10
12
import cocoapods.PubNubSwift.channelWith
11
13
import cocoapods.PubNubSwift.disconnect
12
14
import cocoapods.PubNubSwift.getToken
15
+ import cocoapods.PubNubSwift.parseWithToken
13
16
import cocoapods.PubNubSwift.reconnectWithTimetoken
14
17
import cocoapods.PubNubSwift.removeAllListeners
15
18
import cocoapods.PubNubSwift.removeEventListenerWithListener
@@ -144,6 +147,7 @@ import com.pubnub.internal.subscription.SubscriptionImpl
144
147
import com.pubnub.internal.subscription.SubscriptionSetImpl
145
148
import com.pubnub.kmp.CustomObject
146
149
import com.pubnub.kmp.Uploadable
150
+ import com.pubnub.kmp.safeCast
147
151
import kotlinx.cinterop.ExperimentalForeignApi
148
152
149
153
@OptIn(ExperimentalForeignApi ::class )
@@ -1022,7 +1026,49 @@ class PubNubImpl(private val pubNubObjC: KMPPubNub) : PubNub {
1022
1026
}
1023
1027
1024
1028
override fun parseToken (token : String ): PNToken {
1025
- TODO (" Not yet implemented" )
1029
+ return pubNubObjC.parseWithToken(token)?.let {
1030
+ PNToken (
1031
+ version = it.version().intValue,
1032
+ timestamp = it.timestamp().longValue(),
1033
+ authorizedUUID = it.authorizedUUID(),
1034
+ resources = mapPAMTokenResources(it.resources()),
1035
+ patterns = mapPAMTokenResources(it.patterns()),
1036
+ meta = it.meta().asMap()
1037
+ )
1038
+ } ? : PNToken (
1039
+ resources = PNToken .PNTokenResources (),
1040
+ patterns = PNToken .PNTokenResources ()
1041
+ )
1042
+ }
1043
+
1044
+ private fun mapPAMTokenResources (from : KMPPAMTokenResource ): PNToken .PNTokenResources {
1045
+ val channels = from.channels().safeCast<String , KMPPAMPermission >().mapValues {
1046
+ mapPAMTokenResourcePermission(it.value)
1047
+ }
1048
+ val channelGroups = from.channelGroups().safeCast<String , KMPPAMPermission >().mapValues {
1049
+ mapPAMTokenResourcePermission(it.value)
1050
+ }
1051
+ val uuids = from.uuids().safeCast<String , KMPPAMPermission >().mapValues {
1052
+ mapPAMTokenResourcePermission(it.value)
1053
+ }
1054
+
1055
+ return PNToken .PNTokenResources (
1056
+ channels = channels,
1057
+ channelGroups = channelGroups,
1058
+ uuids = uuids
1059
+ )
1060
+ }
1061
+
1062
+ private fun mapPAMTokenResourcePermission (from : KMPPAMPermission ): PNToken .PNResourcePermissions {
1063
+ return PNToken .PNResourcePermissions (
1064
+ read = from.read(),
1065
+ write = from.write(),
1066
+ manage = from.manage(),
1067
+ delete = from.delete(),
1068
+ get = from.get(),
1069
+ update = from.update(),
1070
+ join = from.join()
1071
+ )
1026
1072
}
1027
1073
1028
1074
override fun unsubscribeAll () {
0 commit comments